【问题标题】:node.js modify response and store request at the same timenode.js同时修改response和store request
【发布时间】:2019-07-15 05:28:15
【问题描述】:

所以我要做的是在我的 json-server 收到请求时手动覆盖响应。我对此很好,但我不知道如何添加一点以将原始请求也存储在数据库中。

这是我的代码(我将来自请求和静态 uuid 的名称作为响应发送) 下一个();如果步骤失败,则抱怨它无法设置标题。

module.exports = (req, res, next) => {

    if (req.path == "/business") {
        res.status(201);

        res.jsonp({
            id: "a23e1b13-cf69-461c-aa8a-a0eb99e41350",
            name: req.body['name'],
            revision: "1"
        });

        next();
    }
    else {
        next();
    }
}

【问题讨论】:

    标签: node.js json-server


    【解决方案1】:

    如果您想将数据从中间件传递到任何路由,您可以使用 req 对象而不是 res 对象来赋值。

    app.use(function(req.res)) {
        req.custom_data = {
                id: "a23e1b13-cf69-461c-aa8a-a0eb99e41350",
                name: req.body['name'],
                revision: "1"
            };
    next();
    }
    

    从其他位置你可以这样做。

    module.exports = (req, res, next) => {
    res.jsonp(req.custom_data)//something like this
    }
    

    也许对你有帮助。

    【讨论】:

      【解决方案2】:

      你是对的。

      例如,我们不能:

      server.js

      const jsonServer = require("json-server")
      const server = jsonServer.create()
      const router = jsonServer.router("db.json")
      
      server.use(jsonServer.defaults())
      server.use(jsonServer.bodyParser)
      
      server.use((req, res, next) => {
        if (req.method === "POST" && req.url === "/business") {
          res.status(201)
          res.jsonp({
            id: "a23e1b13-cf69-461c-aa8a-a0eb99e41350",
            name: req.body["name"],
            revision: "1"
          })
        }
        next()
      })
      
      server.use(router)
      server.listen(3000, () => {
        console.log("JSON Server is running")
      })
      
      

      或者我们在运行node server.js 时得到:Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client,因为我们在调用res.jsonp 时已经设置并发送了标头,所以我们不能通过调用server.use(router) 再次执行此操作。

      我们有几个选择。

      选项 1。

      server.js

      const jsonServer = require("json-server")
      const server = jsonServer.create()
      const router = jsonServer.router("db.json")
      
      server.use(jsonServer.defaults())
      
      server.use(router)
      server.listen(3000, () => {
        console.log("JSON Server is running")
      })
      

      db.json

      {
        "business": []
      }
      

      现在我们可以 POST 到我们的 http://localhost:3000/business 端点并将我们的请求正文保存到我们的数据库中。但是,我们无法修改 201 状态,也无法将请求正文修改为其他内容。

      选项 2。

      server.js

      const jsonServer = require("json-server")
      const server = jsonServer.create()
      
      server.use(jsonServer.defaults())
      server.use(jsonServer.bodyParser)
      
      server.post("/business", (req, res, next) => {
        res.status(201)
        res.jsonp({
          id: "a23e1b13-cf69-461c-aa8a-a0eb99e41350",
          name: req.body["name"],
          revision: "1"
        })
        next()
      })
      
      server.listen(3000, () => {
        console.log("JSON Server is running")
      })
      

      现在我们得到了正确的响应,但是我们不能再将business键保存到我们的数据库中,因为我们正在调用server.post("/business"...

      但是,您可以在自己的代码中使用它并将其保存在其他地方(或写入您自己的数据库),因为此响应将从 Promise 返回。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多