【发布时间】:2021-08-01 07:12:38
【问题描述】:
我正在后端准备我的模型 我有 tab1 包含 id 和 col:t1 我想先插入该表,然后获取它的 id 并将其与其他 col 一起插入到我的 tab2 中。所以 id_tab2 是我来自 tab1 的外键(tab 2 有自己的 id ofc 而不是 id_tab2) 这是我声明查询的文件:
const createUser=(req, res, next) => {
let con=req.con
let { t1,x1,x2,x3,x4,x5,x6,id_tab2 } = req.body;
con.query(
`SELECT * FROM users
WHERE x3 = $1`,
[x3],
(err, results) => {
if (err) {
console.log(err);
res.status(404).json({message: err});
}
if (results.rows.length > 0) {
res.status(404).json({message: "user exists"});
} else {
const hashedPassword = bcrypt.hashSync(x4, parseInt(process.env.BCRYPT_ROUNDS));
con.query('WITH ins1 AS ( INSERT INTO tab1(t1) VALUES ($1) RETURNING id AS id_tab2), ins2 AS ( INSERT INTO tab2 (x1,x2,x3,x4,x5,x6,id_tab2) SELECT $1,$2,$3,$4,$5,$6,id_tab2 FROM ins1 RETURNING id,x1, x2,x3, x4, x5,x6,id_tab2) SELECT x1, x2,x3, x4, x5,x6,id_tab2 from ins2',
[t1,x1, x2,x3, x4,hashedPassword,x6,id_tab2 ],
(err, results) => {
if (err) {
console.log(err);
res.status(404).json( {message: err});
}
else
{res.status(200).send(results.rows[0])}
}
);
}
}
);
}
当我从 Vue 前端调用 api 时: 这是文件:
axios.post("/accnt/register",data)
.then((res)=>{
this.$emit("addedUser",res.data)
message.success(`user added`)
})
.catch((e)=>{
message.warning(e.response.data.message)
})
})
.catch(error => {
console.log('error', error);
});
我在服务器端得到这个错误:
error: bind message supplies 8 parameters, but prepared statement "" requires 6
.
.
.
.
.
routine: 'exec_bind_message'
我不知道我在这个查询中做错了什么知道如何解决这个问题吗?
【问题讨论】:
标签: node.js postgresql vue.js axios