gpt4 book ai didi

javascript - 可以在不使用中间件函数的情况下增强 express.js req 和 res 变量吗?

转载 作者:行者123 更新时间:2023-11-29 15:35:24 28 4
gpt4 key购买 nike

我在使用 express.js 的 restful 服务中工作,我想增强 req 和 res 变量,例如你可以写类似的东西

app.use(function (req, res, next) {
res.Ok = function (data) {
res.status(200).send(data);
};

res.InternalError = function (err) {
res.status(500).send(err);
};
});

后来

router.get('/foo', function (req, res) {
res.Ok('foo');
})

这将在响应正文中发送“foo”并将状态代码设置为 200,并且运行良好。

我的第一个问题是是否可以在没有中间件功能的情况下添加这样的功能,比如说在 app 变量的属性或原型(prototype)中?

第二个问题是,如果你在应用层用中间件函数添加很多功能,会不会有性能问题。此函数是按请求附加到请求和响应对象还是在应用程序启动时附加一次?

我知道 Sails 框架已经这样做了,但我想知道他们是否也使用中间件功能。

最佳答案

我继续挖掘,发现请求和响应对象是使用 __proto__ 属性在 express 中公开的。

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

app.response.__proto__.foo = function (data) {
this.status(200).send(data);
};

然后在路由器中

router.get('/foo', function (req, res, next) {
res.foo('test');
});

这将在您的浏览器中打印测试,因此可以在不使用任何中间件的情况下添加功能。

注意:我确信这种方法有一些缺点(例如,覆盖明确的预定义属性),但出于测试目的和添加非常简单的功能,我认为在性能方面稍微好一些。

关于javascript - 可以在不使用中间件函数的情况下增强 express.js req 和 res 变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29827047/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com