我的节点js的顺序对我如何处理server.js有影响吗?

时间:2018-05-28 01:14:52

标签: javascript node.js

我正在学习节点js应用程序,我想知道我的app.use(404和500错误)和我app.get(/)路由的控制器路由的错误处理程序的顺序是否重要?

https://www.w3schools.com/nodejs/ https://www.tutorialspoint.com/nodejs/index.htm

这是我的app.js

//**** DEPENDENCIES ****//
const express = require('express');
const app = express();

//use the express handlebars
const exphbs  = require('express-handlebars');
app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');


const index = require('./controllers/index');
const fetch = require('node-fetch');



//**** MIDDLEWARE ****//
// static files will live in the public folder
app.use(express.static('public'));


// **** CONTROLLERS **** //
// separate the route from the app.js to make it cleaner
require('./controllers/index.js')(app);

//app.get('/', index)

// catch 404 and forward to error handler
app.use((req, res, next) => {
  const err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  if(err.status == 404) {
    res.status(err.status || 404);
    res.render('error', {err : err.status, message: "Sorry We Can't Help You", stack: err.stack });
  } else if (err.status == 500) {
    console.log(500);
    // render the error page
    res.status(err.status || 500);
    res.render('error', {err : err.status});
    // res.redirect('/500.html');
  }
});


// **** Local server Port **** //
var PORT = process.env.PORT || 3000;

app.listen(PORT, function(req, res) {
  console.log("Express App listening on port " + PORT + "...");
});

2 个答案:

答案 0 :(得分:1)

是的,虽然我在快递文档中找不到它。路由匹配算法按顺序查看并按顺序执行每个匹配,直到一个调用res.end()(通常通过其他方法,如res.render()和res.send())

答案 1 :(得分:1)

在您的特定情况下,订单确实很重要,因为您在404处理程序中调用了next(err),并且您希望自定义错误路由处理程序获取该顺序,并且它是获取该next(err)的唯一方法是为了它后来。如果您颠倒了顺序,那么您最终只能使用Express中的默认错误处理程序,而不是您自己的自定义错误处理程序。

所以,对于你编写代码的方式,你有正确的顺序,反向顺序不会做你想要的。