中间件的执行顺序是怎样的?
What is the order of execution of middlewares?
我有两条路线。全局变量 route
中的第一条路线。在启动中间件中,第二条路线 returns 也进入该全局变量。
var route = require('./routes/first');
app.use(function(req, res, next) {
route = require('./routes/second');
next();
});
下一个middlawe执行时,我仍然有第一条路线。 为什么我的第一个中婆之前没有开始?
// route contain module from './routes/first'
app.use('/api', route);
但是,如果我使用不同的回调设计,就有可能获得第二条路线...
// route contain module from './routes/second'
app.use('/api', function (req, res, next) {
return route(req, res, next);
});
./routes/first.js
var express = require('express');
var route = express.Router();
route.get('/', function(req, res) {
res.send('First route');
});
module.exports = route;
./routes/second.js
var express = require('express');
var route = express.Router();
route.get('/', function(req, res) {
res.send('Second route');
});
module.exports = route;
因为它在调用 app.use('/api', route);
时形成了一个闭包。当您在父函数中更改它时,use
函数中的路由不会更改。试试这个
app.use(function(req, res, next) {
route = require('./routes/second');
app.use('/api', route);
next();
});
我有两条路线。全局变量 route
中的第一条路线。在启动中间件中,第二条路线 returns 也进入该全局变量。
var route = require('./routes/first');
app.use(function(req, res, next) {
route = require('./routes/second');
next();
});
下一个middlawe执行时,我仍然有第一条路线。 为什么我的第一个中婆之前没有开始?
// route contain module from './routes/first'
app.use('/api', route);
但是,如果我使用不同的回调设计,就有可能获得第二条路线...
// route contain module from './routes/second'
app.use('/api', function (req, res, next) {
return route(req, res, next);
});
./routes/first.js
var express = require('express');
var route = express.Router();
route.get('/', function(req, res) {
res.send('First route');
});
module.exports = route;
./routes/second.js
var express = require('express');
var route = express.Router();
route.get('/', function(req, res) {
res.send('Second route');
});
module.exports = route;
因为它在调用 app.use('/api', route);
时形成了一个闭包。当您在父函数中更改它时,use
函数中的路由不会更改。试试这个
app.use(function(req, res, next) {
route = require('./routes/second');
app.use('/api', route);
next();
});