簡體   English   中英

使用Express.js的自定義404頁面

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM