【发布时间】:2023-03-22 16:19:01
【问题描述】:
我不太确定如何表达这个问题,因此请随时进行更正以根据需要改进它。
我的目标是创建一个 HTTP POST,它将为帖子创建 cmets 并将评论添加到数据库 cmets 表中。我相信这需要执行 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);
}
);
});
奇怪的是这工作了两次然后停止工作。 cmets 表中有两个条目,但任何进一步的帖子都不会做任何事情。这仅适用于 cmets 表单,尚不适用于 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)
);
最初我将 cmets 的 post_id 设置为串行,但我想如果应该从 posts.post_id 加入它,它可能需要是 INT。
非常感谢您的任何指导。
【问题讨论】:
-
'INSERT INTO comments(comment_body) VALUES($1)'您提供[post_id, comment_body]作为值,但只插入一个值。可能您想要'INSERT INTO comments(post_id, comment_body) VALUES($1, $2)'之类的东西。 -
谢谢,是的,我曾尝试从括号中删除 post_id,但无论出于何种原因,它都返回了代理错误。但是,您的想法确实对我有用。我没有进行加入(不起作用),而是完全删除了该请求。然后我按照你的建议做了,只是在初始插入中添加了 post_id 。我没有考虑过在不使用连接的情况下导入参数。
标签: sql reactjs postgresql express post