我正在为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
。
第一个呼叫失败的原因是什么?为什么第二次尝试有效?任何想法表示赞赏
答案 0 :(得分:0)
因为router.use(function (req, res, next) {
仅在第一个请求上执行,并且当您调用next()
时尚未添加路由。之后,您致电router.get(...)
,它将添加路线,因此下一次将可用。
尽管如此,将.get(...)
移到.use(...)
之外(您也可以完全摆脱它)。