我正在尝试渲染一个index.html,但即使使用正确的路径,我也会收到错误信息。
//folders tree
test/server.js
test/app/routes.js
test/public/views/index.html
//routes.js
app.get('*', function(req, res) {
res.sendFile('views/index.html');
});
//server.js
app.use(express.static(__dirname + '/public'));
require('./app/routes')(app);
我也试过
res.sendFile(__dirname + '/public/views/index.html');
如果我使用
res.sendfile('./public/views/index.html');
然后它可以工作,但我看到一个警告,说sendfile已被弃用,我必须使用sendFile。
答案 0 :(得分:5)
尝试添加:
var path = require('path');
var filePath = "./public/views/index.html"
var resolvedPath = path.resolve(filePath);
console.log(resolvedPath);
return res.sendFile(resolvedPath);
这应该清除文件路径是否符合您的预期
答案 1 :(得分:0)
尝试使用root选项,它为我做了:
var options = {
root: __dirname + '/public/views/',
};
res.sendFile('index.html', options, function (err) {
if (err) {
console.log(err);
res.status(err.status).end();
}
else {
console.log('Sent:', fileName);
}
});
答案 2 :(得分:0)
问题是你已经定义了静态文件中间件,但是你在那之前定义了一个尝试处理静态文件服务的路由(所以静态文件中间件实际上什么也没做)。因此,如果你想从一条路线res.sendFile
得到某些东西,你需要给它一个绝对路径。或者,您可以删除app.get('*', ...)
路由并让快速中间件完成其工作。
答案 3 :(得分:0)
你可以尝试下面的代码
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
app.use(express.static(path.join(__dirname, 'public/views')));
处理api电话
app.use('/', function(req, res, next) {
console.log('req is -> %s', req.url);
if (req.url == '/dashboard') {
console.log('redirecting to -> %s', req.url);
res.render('dashboard');
} else {
res.render('index');
}
});