sql - 为什么在 URL 中间使用 :id 时,带有 pool.query 的 POST 请求只能间歇性地工作?
问题描述
我不太确定如何表达这个问题,因此请随时进行更正以根据需要进行改进。
我的目标是创建一个 HTTP POST,它将为帖子创建评论并将评论添加到数据库评论表中。我相信这需要执行 INSERT 和 JOIN 以将特定的 POST id 添加到评论中。
这是我第一次在一个查询中包含两个请求,所以我不确定这是否正确。我已经阅读了有关使用 UNION 的信息,但无法找出正确的语法,因为没有一个示例在他们的请求周围包含引号 ''。
我的发帖路线:
router.post(`/posts/:id/comments`, (request, response, next) => {
const { id } = request.params; // tried with and without brackets {}
const { comment_body } = request.body;
// Testing for correct params
console.log(id);
console.log(comment_body);
pool.query(
'INSERT INTO comments(comment_body) VALUES($1)',
[post_id, comment_body],
'SELECT * FROM comments JOIN posts ON posts.post_id = commments.post_id',
(err, res) => {
if (err) return next(err);
}
);
});
奇怪的是,这工作了两次然后停止工作。评论表中有两个条目,但任何进一步的帖子都不会做任何事情。这仅在评论表单中有效,在 Postman 中还没有
这在两个单独的测试中起作用。当在 id 周围使用方括号时,在表中创建了帖子,但在此表上没有加入 post_id:
const { id } = request.params;
如果我不使用括号,则在数据表中创建了 post_id:
const id = request.params;
这是我的表:
CREATE TABLE posts(
post_id SERIAL,
user_id INT,
post_body CHARACTER varying(20000)
);
CREATE TABLE comments(
id SERIAL,
post_id INT,
user_id INT,
comment_body CHARACTER varying(20000)
);
最初我将评论的 post_id 设置为串行,但认为如果应该从 posts.post_id 加入,它可能需要是 INT。
非常感谢任何方向。
解决方案
我设法通过以下方法解决了这个问题:
router.post(`/posts/:id/comments`, async (request, response, next) => {
try {
const { id } = request.params;
const { comment_body } = request.body;
await pool.query
('INSERT INTO comments(post_id, comment_body) VALUES($1, $2)',
[id, comment_body]);
} catch(error) {
console.log(error.message)
}
});
我没有使用 JOIN,而是将帖子 ID 参数包含在原始 INSERT 中并以这种方式导入。我最初认为我必须将其作为一个联接来执行,但无法获得第二个 SQL 请求才能工作。感谢snakecharmerb 的想法。
我还添加了异步/等待。
推荐阅读
- php - 检查网站是否正在维护中
- python - ImportError:无法从“google.cloud”(未知位置)导入名称“pubsub_v1”
- r - 给定另一列的值,如何计算一列中某物的实例?
- java - 是否有以这种方式重新排列二维数组的公式?
- amazon - Amazon Transcribe 转换 .json 成绩单
- react-native - React Native not installing properly
- grafana - Aggregating Grafana to the Most Current Data
- javascript - 过滤嵌套的 JSON 数据
- heroku - dyno 重新启动后运行 rake 任务
- c++ - 在可变参数宏中找出 __VA_ARGS__ 的类型