[英]Custom 404 page with Express.js
引發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);
});
但是我收到以下錯誤:
錯誤:未指定默認引擎,也未提供擴展名。 在EventEmitter.render(/home/pi/server/node_modules/express/lib/application.js:569:12)在新視圖(/home/pi/server/node_modules/express/lib/view.js:62:11) ),位於Layer.handle的/home/pi/server/index.js:19:9的ServerResponse.render(/home/pi/server/node_modules/express/lib/response.js:961:7)[作為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)錯誤:未指定默認引擎,也未提供擴展名。 在EventEmitter.render(/home/pi/server/node_modules/express/lib/application.js:569:12)在新視圖(/home/pi/server/node_modules/express/lib/view.js:62:11) ),位於Layer.handle的/home/pi/server/index.js:19:9的ServerResponse.render(/home/pi/server/node_modules/express/lib/response.js:961:7)[作為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)
如果您可以將404
頁面404
靜態頁面,則只需執行以下操作:
res.sendFile('/path/to/404.html');
相反,如果要渲染某個視圖模型對象(例如{url: req.url}
),則必須決定使用模板引擎(例如Jade,EJS,Handlebars)。 例如,假設您想使用玉器,首先將其安裝為依賴項:
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
文件)保存在用戶無法訪問的地方。
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
對於response.render方法,您必須使用ejs之類的模板引擎。
並且您必須設置視圖選項。
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
但是,如果您已將404文件放在公用文件夾中,則只需使用sendfile或重定向到靜態路徑即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.