2013-02-20 81 views
3

一个非常简单的问题,但困扰我很多。NodeJS url请求,绝对还是相对?

以下两种情况有什么区别?

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 SRC是我刚才提到的这两个案件的任何情况下?

在另一方面,我总是得到404错误,如果我发球以下列方式请求(启动时没有斜杠)

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

在我看来,路径从“/”指的根文件夹开始的应用程序,另一种是从__dirname的相对路径。我不明白为什么我的服务器不能处理app.get('script/a.js')这个请求在开始时没有斜线?

有什么问题吗?

回答

3

当一个路径以斜杠开始/这意味着它是一个绝对路径。 当它不以斜杠开始时,它是相对路径。

让我们来看一个例子。想象一下,我的硬盘只有下列文件夹:

main 
    subfolder1 
    subfolder2 
     lastfolder 

现在想象一下,我们在文件夹subfolder2,我们要加载的文件是内部lastfolder。我们可以用一个相对路径加载:

lastfolder/file.txt 

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

/main/subfolder2/lastfolder/file.txt 

两个路径是正确的,但如果我们把相对人可以失败到另一个文件夹(例如,如果我们在subfolder1),而绝对路径将永远是正确的(如果我们不修改文件夹当然)。

+0

谢谢,我想我知道这个概念。但我仍然无法理解为什么我的服务器无法处理app.get('script/a.js')这个请求在开始时没有出现任何问题? – Kevin 2013-02-20 08:37:25

+0

好吧,当相对路径不起作用时,第一个问题是:我在哪里?我在'main'文件夹中吗?在'subfolder1'里面?在你的情况下,你的Node应用程序在哪里运行?请参阅:http://nodejs.org/docs/v0.4.2/api/process.html#process.cwd或使用绝对路径。 – TheBronx 2013-02-20 08:43:39

+0

只是确保一件事,你的意思是当出现失败的相对路径时,服务器端将尝试从app根目录(process.cwd(),如你所说)找到这个文件? – Kevin 2013-02-20 09:21:39