node.js同时修改响应和存储请求

时间:2019-02-21 10:23:14

标签: node.js json-server

所以我想做的是在对json服务器有请求时手动覆盖响应。我很好,但是我不知道如何添加一些内容以将原始请求也存储在数据库中。

这是我的代码(我正在从请求和静态uuid发送名称作为响应) 下一个();如果步骤失败则无法设置标头。

find_element_by_css_selector("a.s-color-twister-title-link")

2 个答案:

答案 0 :(得分:0)

如果要将数据从中间件传递到任何路由,则可以使用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
}

这可能会对您有所帮助。

答案 1 :(得分:0)

你是对的。

例如,我们不能:

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")
})

或者我们得到:Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client,当我们运行node server.js时,因为调用res.jsonp时我们已经设置并发送了标头,所以我们不能通过调用{{1 }}。

我们有两种选择。

选项1。

server.js

server.use(router)

db.json

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")
})

现在,我们可以发布到{ "business": [] } 端点,并将请求正文保存到数据库中。但是,我们无法修改201状态,也不能将请求正文更改为其他内容。

选项2。

server.js

http://localhost:3000/business

现在我们得到了正确的响应,但是由于我们正在调用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密钥中

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