我正在尝试在抛出404错误时重定向到html页面。我的公共文件夹中有一个标题为:404的文件夹。这是index.js中的代码:
var express = require('express');
var app = express();
app.use(express.static(__dirname + "/public"));
app.route('/me').get(function(req, res){
res.sendFile(__dirname+'/public/html/contacts.html')
})
app.use(function(req, res, next){
// res.type('txt').send('Not found');
// res.status(404).end('error');
if (req.accepts('html')) {
res.render('404', { url: req.url });
return;
}
});
var server = app.listen(8000, function(){
console.log("Server is happening %s", server.address().port);
});
但是我收到以下错误:
错误:未指定默认引擎且未提供扩展名。 在新视图(/home/pi/server/node_modules/express/lib/view.js:62:11) 在EventEmitter.render(/home/pi/server/node_modules/express/lib/application.js:569:12) 在ServerResponse.render(/home/pi/server/node_modules/express/lib/response.js:961:7) 在/home/pi/server/index.js:19:9 在Layer.handle [as handle_request](/home/pi/server/node_modules/express/lib/router/layer.js:95:5) 在trim_prefix(/home/pi/server/node_modules/express/lib/router/index.js:312:13) 在/home/pi/server/node_modules/express/lib/router/index.js:280:7 在Function.process_params(/home/pi/server/node_modules/express/lib/router/index.js:330:12) 在下一个(/home/pi/server/node_modules/express/lib/router/index.js:271:10) 在SendStream.error(/home/pi/server/node_modules/express/node_modules/serve-static/index.js:120:7) 错误:未指定默认引擎且未提供扩展名。 在新视图(/home/pi/server/node_modules/express/lib/view.js:62:11) 在EventEmitter.render(/home/pi/server/node_modules/express/lib/application.js:569:12) 在ServerResponse.render(/home/pi/server/node_modules/express/lib/response.js:961:7) 在/home/pi/server/index.js:19:9 在Layer.handle [as handle_request](/home/pi/server/node_modules/express/lib/router/layer.js:95:5) 在trim_prefix(/home/pi/server/node_modules/express/lib/router/index.js:312:13) 在/home/pi/server/node_modules/express/lib/router/index.js:280:7 在Function.process_params(/home/pi/server/node_modules/express/lib/router/index.js:330:12) 在下一个(/home/pi/server/node_modules/express/lib/router/index.js:271:10) 在SendStream.error(/home/pi/server/node_modules/express/node_modules/serve-static/index.js:120:7)
答案 0 :(得分:2)
如果您可以将404
页面调整为静态页面,则可以执行以下操作:
res.sendFile('/path/to/404.html');
相反,如果你想要渲染一些视图模型对象(例如{url: req.url}
),你必须决定模板引擎(例如,Jade,EJS,Handlebars)。例如,假设您要使用jade,首先将其作为依赖项安装:
npm install jade
然后,您应该在脚本的开头添加以下行:
app.set('view', path.join(__dirname, 'private/view/path'));
app.set('view engine', 'jade');
模板引擎到位后,您可以执行以下操作:
res.render('viewName', viewModelObject)
,viewName
将被解析为./private/view/path/viewName.jade
。因此,假设存在./private/view/path/404.jade
,您可以这样做:
res.render('404', { url: req.url });
请务必将模板(即您的.jade
文件)保留在用户无法访问的位置。
答案 1 :(得分:0)
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
答案 2 :(得分:0)
对于response.render方法,你必须使用像ejs这样的模板引擎。
您必须设置视图选项。
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
但是如果你把404文件放在公共文件夹中,那么你可以简单地使用sendfile或重定向到静态路径。