我使用postgresql和expressjs来创建api。动机是在击中api后返回布尔值和msg。我的用户名是admin
下面是api
router.get("/", (request, response) => {
console.log(request.body.name, request.body.password);
dbpool
.connect()
.then(client => {
client
.query(
`SELECT checkUsername(${request.body.name},${request.body.password});`
)
.then(res => {
client.release();
console.log("logged in");
response.send(res.rows);
})
.catch(err => {
console.log(err);
});
})
.catch(err => {
console.log("Check" + err);
});
});
Api正在使用postman以json格式从body接收请求。
,这里是从数据库的函数,我在api调用。
CREATE OR REPLACE
FUNCTION checkUsername (
Iusername VARCHAR,
Iuserpassword VARCHAR
)
RETURNS BOOLEAN
LANGUAGE sql
AS $$
SELECT EXISTS(
SELECT *
FROM "users"
WHERE username=iusername
AND user_password=Iuserpassword
);
$$;
从邮差击中api后,我得到错误:列"admin"不存在
问题解决。我漏掉了引号如果你看看我的路由器查询方法,我使用模板字符串
.query(
`SELECT checkUsername(${request.body.name},${request.body.password});`
)
上面我传递参数给数据库函数。因为传递的每个参数都需要用引号括起来。所以查询应该像
下面.query(
`SELECT checkUsername('${request.body.name}','${request.body.password}');`
)
就像我们在数据库中调用函数一样。
SELECT "checkUsername"('param','param');
我们必须在我们的查询方法中精确地模仿。