node.js - node.js同时修改response和store request
问题描述
所以我想做的是在我的 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();
}
}
解决方案
你说的对。
例如,我们不能:
服务器.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。
服务器.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。
服务器.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 返回。
推荐阅读
- python - 连接 Matplotlib ListedColormap 值以匹配指定值
- c++ - 从字符串中删除计数大于或等于突发长度的相邻重复项
- php - PHPMailer 适用于来自本地主机的请求,但不适用于来自我机器外部的请求
- node.js - 使用 .get() 时变量未定义
- mongodb - Spring Boot Reactive MongoDB API with GraphQL - “Java 类不是列表或泛型类型信息丢失”
- css - css变换旋转闪烁/不工作
- python - 为什么图像没有在 Html 模板中呈现,甚至被添加到静态文件 - Django?
- java - 用于 websphere 的 Was_public.jar 和 j2ee.jar
- reactjs - 在嵌套路由中找不到页面
- arduino - Octave Arduino Toolkit 串行通信的默认波特率是多少,如何配置?