Node + Express:Express是否为每个请求处理程序克隆req和res对象?
如果JavaScript通过引用复制对象,那么在将请求传递给每个请求处理程序之前,Express是否克隆了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
testing:
$ curl localhost:8080
这是一个有用的function – 这意味着中间件function可以使用req
和res
将数据传递给下游function。 例如,授权中间件可能会添加req.user
属性。
并发在这里不是一个问题,因为Node.js是单线程的 – 在任何给定的时间都不可能运行两条路由。
它也不会通过多个路由运行一个请求 – 你可以添加另一个get("*")
路由,你会发现它不会被调用。
由于JavaScript是单线程的,因此没有同时进行的路由处理,并且不存在multithreading陷阱。 req
& res
不克隆,它们被扩展。
- 制作和使用NodeJS的soap客户端同步
- 如何执行一个Mongoosevalidationfunction只用于创build用户页面,而不是编辑用户页面?
- 我如何在同一个url上运行网页游戏?
- Access-Control-Allow-Origin使用Node.js,express和socket.io在OpenShift上
- 快递ipfilter的具体路线?
- 未捕获的SyntaxError:意外的令牌var Node.js
- NodeJS Sequelize – 无法读取未定义的属性'_isSequelizeMethod'
- 如何用express.jsconfigurationdynamic路由
- 下载返回的空文件