小编Jay*_*Jay的帖子

为什么res.send被调用两次?

我正在为快速路由器创建一个中间件,它将为每个请求和响应执行一些代码.拦截请求很容易,并且有很多例子,但我没有找到任何优雅的方法来拦截响应.经过一些研究,我提出的最好的方法是替换响应对象的send函数,如下面的代码片段所示:

const express = require('express');
const app = express();
var router = express.Router();
var port = process.env.PORT || 3000;

router.get('/test', function(req, res) {
    res.send({
        message: "testing"
    });
});

app.use(function(req, res, next){
    console.log("INTERCEPT-REQUEST");
    const orig_send = res.send;
    res.send = function(arg) {
        console.log("INTERCEPT-RESPONSE");
        orig_send.call(res, arg);
    };
    next();
});

app.use("/api", router);
app.listen(process.env.PORT || 3000) && console.log("Running");
Run Code Online (Sandbox Code Playgroud)

这种方法存在一个问题:出于某种原因,"INTERCEPT-RESPONSE"会在控制台中打印两次,这意味着res.send被调用两次......

我可以在第一次调用res.locals时设置一个标志,以避免两次处理响应,但我想知道为什么res.send被调用两次?

node.js express

8
推荐指数
1
解决办法
3845
查看次数

是否可以在不使用 Copy 模块的情况下将本地文件复制到删除服务器?

我正在编写一个将配置文件上传到远程服务器的剧本,但远程服务器没有安装 python(这是使用模块的要求)。我已经成功地使用原始功能编写了其他剧本,以避免在服务器上安装 python,但我在 Ansible 文档中找不到任何示例来使用准系统 ssh 执行文件上传。是否可以基于非模块上传?

ansible

3
推荐指数
1
解决办法
4231
查看次数

标签 统计

ansible ×1

express ×1

node.js ×1