你是对的。
例如,我们不能:
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 返回。