修改express.js中的res对象
modifying res object in express.js
我有这个想法,为我的SPA网站进行后端设计。我会实现它,以便以"/api/"开头的路由只返回JSON中的相关数据。所有其他路由都将导致整个页面加载。
现在我的想法是在中间件中这样做:
app.use(function(req, res, next() ){
if(req.path.split("/")[0]=="api"){
res.send = res.json;
//or other custom response-function, I see many possibilities here!
}else{
...
}
});
app.use(routes);
现在,我的问题是,这是全局修改res对象,还是仅针对当前请求(res的这个实例)?我的理解是,当前的节点会被修改,据我所知,这是真的,但节点速度极快,所以我自己测试有点困难(一毫秒内只能刷新这么多选项卡!)有人知道吗?
编辑:很多回答我问题的人都问我为什么要这么做。重点是抽象服务器对来自前端加载的客户端和需要完整页面的客户端的请求所做的操作。我也在考虑使用同样的方法添加加载部分模板的路径的可能性。通过修改res.send,我的控制器可能会担心获取数据并将其发送出去,res.send将已经知道是否需要进行一些渲染。转念一想,尽管res.send本身确实很有用,但我可能会将res修改为res.answer或类似的。(也减少了混乱!)
我决定把它作为一个答案,因为有时未来的读者不会阅读评论。
1) 您可以随心所欲地修改res
及其成员。您操作的是响应的实例,而不是它的原型。没有"全球"资源,但它确实有一个原型。
2) 阅读文档会在这里得到回报。如果向CCD_ 2传递对象或数组,则CCD_。也就是说,在典型的情况下,你的代码的其余部分运行方式与你没有使用res.send()
没有什么不同,但几个月或几年后会让某人(也许是你)感到困惑。
我对此进行了测试,每次收到请求时,响应对象都具有原始的send函数,而不是更改后的值。所以不,它不会在全球范围内改变它。
这是我做的测试:
app.use(function(req, res){
console.log(res.send);
res.send = 'a';
console.log(res.send);
});
虽然我还是不太确定你为什么要这么做?当有人看到您的API路由并看到res.send()
时,似乎会非常令人困惑,但其效果却是res.json
。为什么不能在API路由函数中使用res.json
?
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 修改express.js中的res对象
- 以值为对象创建JSON格式的res.cookie
- Expressjs-有没有一种方法可以让helper函数与req,res对象一起使用
- 如何在请求中操作res.locals对象
- 设置res.locals会改变req对象
- 如何在角度控制器中将res.render数据用作$scope对象