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

Node.js 404在Express.js中使用response.sendfile时出错,node.js,express,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') , u

我有一个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'));
});
// Some stuff...
exports.plainhtml = function(req, res) {
  res.sendfile('/public/htmls/' + req.params.file);
};
我的
routes/index.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'));
});
// Some stuff...
exports.plainhtml = function(req, res) {
  res.sendfile('/public/htmls/' + req.params.file);
};
我打开浏览器并尝试获取以下地址:
http://localhost:3000/content/myhtml.html
我得到404错误:

express404错误:enoint,stat'/public/htmls/myhtml.html'

路由已完成,函数名为。。。问题是当我尝试使用
res.sendfile
时。我应该经过哪个地址


怎么办?

您的express应用程序位于
app.js

sendfile
path
参数是一个相对路径。因此,当您执行
res.sendfile('xxx.js')
时,express将在
app.js
所在的同一目录中查找
xxx.js

如果
路径
以斜杠开始,则表示它是文件系统中的绝对路径,例如
/tmp

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

res.sendfile('passwd', { root: '/etc/' });

请参阅。

您的express应用程序位于
app.js

sendfile
path
参数是一个相对路径。因此,当您执行
res.sendfile('xxx.js')
时,express将在
app.js
所在的同一目录中查找
xxx.js

如果
路径
以斜杠开始,则表示它是文件系统中的绝对路径,例如
/tmp

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

res.sendfile('passwd', { root: '/etc/' });

请参阅。

是否尝试了
public/htmls/
?它可以工作。。。但是我在app.js中添加了使用/public而不仅仅是public的规则。。。mak请您在Expression/Node.js中发布一个解释如何执行路由的答案,好吗?而且。。。谁在这里处理路由?Node、js还是Express?谢谢你有没有试过
public/htmls/
?它很有效。。。但是我在app.js中添加了使用/public而不仅仅是public的规则。。。mak请您在Expression/Node.js中发布一个解释如何执行路由的答案,好吗?而且。。。谁在这里处理路由?Node、js还是Express?谢谢谢谢mak,这真的很有帮助。当用户使用一个不存在的:file参数请求时,它仍然会在页面上打印enoint:,从而向用户泄漏不需要的服务器信息。然后检查该文件是否存在。谢谢mak,这真的很有帮助,它仍然将enoint:打印到页面上,当用户使用不存在的:file参数请求时,该页面会向用户泄漏不需要的服务器信息。然后检查该文件是否存在。