比较神奇的是名字。但是Middleware和Router其实都是处理Resquest/Response数据的。不同之处在于:
考虑单个Middleware的情形。Middleware的优先级比较高。也就是说,Request会先到达Middleware,Middleware觉得需要进一步处理,就调用next。否则直接返回response就可以了。
无论什么URL,都会交给Middleware。但是一个URL,只会有一个对用的Router。
接口不同。注册Middleware用app.use。创建Router则用app.get等http函数。
Express处理数据的流程是:先让Middleware处理。然后是Router。
吐槽下,优快云似乎禁掉了Markdown的功能。连个记事本都算不上了。
app.use(function(req, res, next){
console.log("middle req="+req);
req.authenticatedUser = users[0];
res.send('Viewing user ');
// next();
});
app.get('/', function(req, res){
console.log("router /");
res.redirect('/user/0');
});
还有一个知识点是:arguments。对于有名的函数,可以通过函数名来引用,如https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/arguments。
对于匿名的,直接使用就好了:
var slice = Array.prototype.slice;
const app = function(n) {
console.log('after: ' + arguments);
// Array.prototype.slice.call(array, 1);
var args = slice.call(arguments, 1);
console.log(args);
}
app(2, 3, 4);
console.log('returned: ' + arguments);
// "after: [object Arguments]"
// [3, 4]
// Uncaught ReferenceError: arguments is not defined"