快速路线仅在第二次尝试后有效

时间:2019-07-28 09:40:35

标签: javascript node.js express

我正在为node.js后端服务器使用express框架。我正在使用快速路由器来定义不同的路由。

这是我的app.js文件:

var express = require('express');
var app = express();
var server = require('http').Server(app);

var cors = require('cors');
app.use(cors());

app.use(express.json());

var route = require('./route');
app.use('/api/', route);

server.listen(3000, () => {
    console.log('App running on port 3000!');
});

这是我的路由器route.js

var express = require('express');
var router = express.Router();

var controller = require('./controller');

router.use(function (req, res, next) {

    next();

    router.get('/test', function (req, res, next) {
        controller.get(req, res, next);
    });

});

module.exports = router;

路由本身使用控制器来控制逻辑controller.js

exports.get = function (req, res, next) {
  res.send('Hello World');
}

node app.js启动应用并调用已定义的路由http://localhost:3000/api/test会导致Cannot GET /api/test 第一次尝试。但是,再次再次呼叫路由会产生预期的答案hello world

第一个呼叫失败的原因是什么?为什么第二次尝试有效?任何想法表示赞赏

1 个答案:

答案 0 :(得分:0)

因为router.use(function (req, res, next) {仅在第一个请求上执行,并且当您调用next()时尚未添加路由。之后,您致电router.get(...),它将添加路线,因此下一次将可用。

尽管如此,将.get(...)移到.use(...)之外(您也可以完全摆脱它)。