NodeJS URL请求,绝对路径还是相对路径?

3
一个非常简单的问题,但让我很困扰。以下两种情况有什么区别?
index.html

 - script src="script/a.js"
 - script src="/script/a.js"  // starting with slash

为什么我的服务器可以处理这个请求(以斜杠开头)

app.get('/script/a.js', function(req, res){ // with slash
    res.sendfile(__dirname + '/realfolder/script/a.js');
}); 

无论客户端URL来源是我刚提到的两种情况中的哪一种,都不会影响结果。另一方面,如果按照以下方式(以无斜杠开头)处理请求,将始终收到404错误。
app.get('script/a.js', function(req, res){ // without slash
    res.sendfile(__dirname + '/realfolder/script/a.js');
}); 

在我看来,路径从'/'开始表示应用程序的根目录,其他路径则是相对于__dirname的路径。但我不明白为什么我的服务器无法处理app.get('script/a.js')这个请求,因为它没有以斜杠开头。

有什么问题吗?

1个回答

3
当路径以斜杠/开头时,表示它是一个绝对路径。当它不以斜杠开头时,则是相对路径。
让我们看一个例子。假设我的硬盘只有以下文件夹:
main
    subfolder1
    subfolder2
        lastfolder

现在假设我们在文件夹 subfolder2 中,并且想要加载一个位于 lastfolder 内部的文件。我们可以使用相对路径进行加载:

lastfolder/file.txt

但是我们也可以使用绝对路径:

/main/subfolder2/lastfolder/file.txt

两种路径都是正确的,但是相对路径可能会失败,如果我们移动到另一个文件夹(例如如果我们在subfolder1中),而绝对路径将始终是正确的(当然,如果我们不修改文件夹)。


谢谢,我想我已经了解这个概念。但是我仍然不明白为什么我的服务器无法处理没有斜杠开头的'app.get('script/a.js')'请求? - nwpie
当相对路径无法工作时,第一个问题是:我在哪里?我在main文件夹中吗?还是在subfolder1内部?在您的情况下,您的Node应用程序在哪里运行?请参见:http://nodejs.org/docs/v0.4.2/api/process.html#process.cwd 或使用绝对路径。 - Salvatorelab
请确认一件事,您的意思是当出现失败的相对路径时,服务器端会尝试从应用程序根目录(如您所说的process.cwd())中查找此文件吗? - nwpie
不行就是不行。所以你必须确保它不会失败。这就是为什么我指向了 process.cwd()。结合 __dirname,它将帮助你解决任何相对路径的问题。 - Salvatorelab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接