如果Javascript通过引用复制对象,那么Express在将
req
和res
对象传递给每个请求处理程序之前是否克隆它们?如果没有,那么Express如何处理同时运行并使用相同req
和res
引用的路由之间可能发生的冲突?req
和res
对象传递给每个请求处理程序之前是否克隆它们?如果没有,那么Express如何处理同时运行并使用相同req
和res
引用的路由之间可能发生的冲突?Express不会克隆req
和res
对象。你可以在这个示例应用中看到:
var http = require('http');
var express = require('express');
var app = express();
var testReq, testRes;
app.use(function(req, res, next) {
console.log('middleware');
testReq = req;
testRes = res;
next();
});
app.get("*", function(req,res) {
console.log('route')
console.log('req the same? ' + (req === testReq)); // logs true
console.log('res the same? ' + (res === testRes)); // logs true
res.send(200);
});
http.createServer(app).listen(8080);
使用 curl
进行测试:
$ curl localhost:8080
req
和res
将数据传递给下游函数。例如,授权中间件可能会添加一个req.user
属性。get("*")
路由,您会发现它不会被调用。req
和res
不会被克隆,它们会被扩展。request
或其他你命名的形式提供它。next
的调用,同时从中间件中附加必要的内容。router.all/*('path', [middleware])
会触发客户端发出的每个请求。
setImmediate
或process.nextTick
或像async
这样的辅助库来实现。 - joews