我有一个Express Node.js应用程序。结构如下:
myapp
+-- node_modules
+-- public
|-- htmls
|-- myhtml.html
+-- routes
|-- index.js
|-- app.js
我的app.js
如下:
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path');
var app = express();
// all environments
// some stuff...
app.use(express.static(path.join(__dirname, 'public')));
app.use('/public', express.static(path.join(__dirname, 'public')));
app.get('/', routes.index);
app.get('/content/:file', routes.plainhtml);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
我的routes/index.js
如下:
// Some stuff...
exports.plainhtml = function(req, res) {
res.sendfile('/public/htmls/' + req.params.file);
};
我打开浏览器并尝试获取以下地址:http://localhost:3000/content/myhtml.html
我收到404错误:
Express 404错误:ENOENT,stat'/public/htmls/myhtml.html'
路由完成并且函数被调用...问题是当我尝试使用res.sendfile
时。我应该通过哪个地址?
怎么办?
答案 0 :(得分:7)
您的快递应用位于app.js
。
path
的{{1}}参数是相对路径。因此,当您执行sendfile
时,Express会在res.sendfile('xxx.js')
所在的同一目录中查找xxx.js
。
如果app.js
以斜杠path
开头,则表示它是文件系统中的绝对路径,例如/
。
如果您使用相对路径,还可以指定根路径:
/tmp
请参阅docs。