Вы правы.
Например, мы не можем:
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
, поэтому мы не можем сделать это снова, вызвав 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": []
}
Теперь мыможет отправить в нашу конечную точку 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.