Функции SQLite3 являются асинхронными, поэтому ваш код не может предполагать, что он получает возвращаемое значение. Но что более важно, вы забыли поработать с концепцией промежуточного программного обеспечения Express. Давайте это исправим. Во-первых, давайте определим нашу пользовательскую функцию проверки как функцию промежуточного программного обеспечения, используя обычные JS соглашения для именования вещей, а не Python соглашения.
Во-первых, проверка значения повара ie:
function checkCookie(req, res, next) {
let cookie = req.params.cookie;
if (!cookie) return next(new Error("no cookie found"));
next();
}
Затем, проверяя логин пользователя:
function checkLogin(req, res, next) {
let username = req.body.username,
hashpassword = req.body.hashpassword;
user_db.all("SELECT * FROM users", [], (err, rows) => {
if (err) return next(err);
// ...
// You code goes here. You didn't show any, so I'm not inventing any either.
// ...
if (hasAccess) return next();
return next(new Error(`user ${username} does not have access`);
});
}
И теперь мы можем использовать это в правильной цепочке express:
app.post("/log_in/:cookie", checkCookie, checkLogin, (req, res) => {
// We KNOW this user has a cookie set, and the their login is good.
// So all this function has to do is form whatever response you need
// given that those two things are true
});