使用Express中间件按请求配置模块?

JJ吉瓦克斯

假设对我的应用程序的每个请求都包含一个MAGIC标头,并且我想将该标头值注入某个位置,而不更新所有请求方法。听起来这是中间件的工作,对吧?

但这将是线程安全的吗?在一个可能同时发送多个请求的环境中,有没有办法使用Express中间件来做到这一点?

换句话说,我问的是示例代码中的Express中间件是否正在设置全局共享变量,或者每个请求是否由独立线程处理,其中myconfig每个单独请求的隔离副本。

示例代码:

var assert = require('assert');
var sleep = require('sleep');

var express = require('express');
var app = express();

var myconfig = {};

app.use(function(req, res, next) {
  myconfig.MAGIC = req.headers['MAGIC'];
  next();
});

app.get('/test', function(req, res) {
  // Pause to make it easy to have overlap.
  sleep(2);
  // If another request comes in while this is sleeping,
  // and changes the value of myconfig.MAGIC, will this
  // assertion fail?
  // Or is the copy of `myconfig` we're referencing here
  // isolated and only updated by this single request?
  assert.equal(myconfig.MAGIC, req.headers['MAGIC']);
});
贪婪

每个请求都将执行任何中间件功能。使用中间件设置某物的值时,通常最好将其设置为app.localsres.locals,具体取决于您希望数据如何持久保存。这是两者的良好比较:https : //stackoverflow.com/a/14654655/2690845

app.use(function(req, res, next) {
  if (req.headers['MAGIC']) {
    app.locals.MAGIC = req.headers['MAGIC'];
  }
  next();
});
...
app.get('/test', function(req, res) {
  assert.equal(app.locals.MAGIC, req.headers['MAGIC']);
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Express中间件进行每个请求的模块配置?

来自分类Dev

使用中间件在 express 中访问 get 请求

来自分类Dev

在Koa中使用Express中间件

来自分类Dev

对Express中的中间件测试进行存根请求\响应

来自分类Dev

如何在Express中制作中间件,如果请求太大,该中间件将返回413?

来自分类Dev

Express / Connect:是否可以多次使用静态中间件?

来自分类Dev

如何使用Express的静态中间件正确加载图像?

来自分类Dev

Jest Express使用参数测试中间件

来自分类Dev

如何使用Express的静态中间件正确加载图像?

来自分类Dev

Express-不使用响应中间件

来自分类Dev

Express Router.use在中间件中的使用

来自分类Dev

Express Validator 使用 5.3.0 中间件功能

来自分类Dev

在请求级别更改 express 中间件中的全局变量。阻止某些请求的获取

来自分类Dev

如何让中间件响应每个请求

来自分类Dev

授权中间件不阻塞请求

来自分类Dev

用于特定请求的 Nodejs 中间件

来自分类Dev

Express 4中的中间件顺序

来自分类Dev

Express中间件,next和Promises

来自分类Dev

Express中间件测试Mocha Chai

来自分类Dev

为什么Express不是中间件?

来自分类Dev

Express 4:中间件分支

来自分类Dev

在 express 中跳过中间件

来自分类Dev

post方法后的Express中间件

来自分类Dev

配置 traefik 的 ForwardAuth 中间件的问题

来自分类Dev

Node.js express.json中间件未按预期解析请求

来自分类Dev

对MongoDB的GET和POST请求上的Express-Winston中间件错误

来自分类Dev

OpenIdConnect中间件不断向请求添加“配置文件”范围

来自分类Dev

将中间件与express()。use一起使用express.static

来自分类Dev

使用中间件Laravel或使用If会话?

Related 相关文章

热门标签

归档