node.js - 板子用node.js实现重定向错误
问题描述
我想在写完一篇新文章后转到详细信息视图。但是如果同时使用 res.reder 和 res.redirect 会报错。那么,我们可以用什么方法来移动呢?
github:https ://github.com/ChoYoungHo-web/watchingame_project
控制器.js
export const getBoardCreate = (req, res) =>
res.render("boardCreate", {
homeName: "watchingame",
pageName: "boardCreate",
routers
});
export const postBoardCreate = (req, res) => {
try {
let sql =
"insert into board(folder,title,content, nicName,writeDate,views,comments) values(?,?,?,1,now(),0,0)";
dbConnection.query(
sql,
[req.body.folder, req.body.title, req.body.content],
(err, result) => {
if (err) {
console.log(err);
} else {
res.render("boardCreate", {
homeName: "watchingame",
pageName: "boardCreate",
routers,
result
});
}
}
);
} catch (err) {
console.log(err);
}
res.redirect(/board${routers.boardDetail(?)});
};
解决方案
这段代码的问题是:无论插入操作成功与否,res.redirect()
都会一直执行(在返回查询结果之前),向浏览器发送HTTP响应。插入操作成功后,res.render()
调用 ,再次尝试向浏览器发送 HTTP 响应。这在 Node.js 中是不允许的,因为它会对 1 个请求返回 2 个 HTTP 响应。
为了实现需求:boardCreate
插入操作成功时渲染boardDetail
,失败时重定向到,需要res.redirect()
在catch
块内移动:
export const postBoardCreate = (req, res) => {
try {
let sql =
"insert into board(folder,title,content, nicName,writeDate,views,comments) values(?,?,?,1,now(),0,0)";
dbConnection.query(
sql,
[req.body.folder, req.body.title, req.body.content],
(err, result) => {
if (err) {
console.log(err);
res.redirect(/board${routers.boardDetail(?)});
} else {
res.render("boardCreate", {
homeName: "watchingame",
pageName: "boardCreate",
routers,
result
});
}
}
);
} catch (err) {
console.log(err);
res.redirect(/board${routers.boardDetail(?)});
}
};
推荐阅读
- excel - 单元格值更改时 VBA 不运行
- javascript - 从数据表服务器端获取隐藏的嵌套数据值
- java - Java 中打印语句的奇怪行为
- javascript - 我应该怎么做才能使用 express-jwt 访问我的静态资源?
- algorithm - Floyd-Warshall alogirthm 如何保证最短路径?
- c++ - 为什么 c++11 sleep_for microseconds 实际上睡了毫秒?
- python - Scikit-learn 的 (0.22.1) KNNImputer 返回错误数量的值
- javascript - 单击事件时向服务器发送多个 Ajax 请求
- gensim - 当您不知道相关结果时如何计算召回率
- java - Java .csv 打印语句问题