在Express.js中使用response.sendfile时出现404错误

时间:2013-07-12 10:03:22

标签: node.js express

我有一个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时。我应该通过哪个地址?

怎么办?

1 个答案:

答案 0 :(得分:7)

您的快递应用位于app.js

path的{​​{1}}参数是相对路径。因此,当您执行sendfile时,Express会在res.sendfile('xxx.js')所在的同一目录中查找xxx.js

如果app.js以斜杠path开头,则表示它是文件系统中的绝对路径,例如/

如果您使用相对路径,还可以指定根路径:

/tmp

请参阅docs