Javascript 回调函数在我的post请求中不起作用

Javascript 回调函数在我的post请求中不起作用,javascript,express,callback,Javascript,Express,Callback,我有一个带有回调的代码: function getUserToken(data, callback) { var password_sha256 = sha256(data.password); getAppById(data.app_id).then(function(res) { console.log("app"+res); if (!res) { console.log("No app");

我有一个带有回调的代码:

function getUserToken(data, callback) {
    var password_sha256 = sha256(data.password);
    getAppById(data.app_id).then(function(res) {
        console.log("app"+res);
            if (!res) {
                console.log("No app");
                callback(err, { meta: {
                    code: 403,
                    error_message: "There are no app with your id!"
                } });
            } else {
                if (res.user_password == password_sha256) {
                    console.log("user found");
                    callback(err, { meta: { code: 200 },
                                    token: password_sha256,
                                    type: 1 });
                    return;
                } else if (res.owner_password == password_sha256) {
                    console.log("owner found");
                    callback(err, { meta: { code: 200 },
                                    token: password_sha256,
                                    type: 0 });
                } else {
                    console.log("user not found");
                    callback(err, { meta: {
                                    code: 403,
                                    error_message: "There are no users with your password!"
                                } });
                }
            }
    });
}
我使用此功能发布一些数据:

router.post('/api/login', (req, res) => {
    db.getUserToken(req.body, function(err, result) {
        console.log(result);
        if (result.error) {
            return res.status(403).send(result);
        } else {
            return res.status(200).send(result);
        }
    });
});

然后找到了getUserToken,例如user,所以在控制台日志中有“user found”,但/api/login中的回调函数不起作用。我的错误在哪里?如何修复它们?

您应该使用回调(null,data)而不是回调(err,data)。这将为您提供所需的输出。

您可以返回承诺,无论是本机的还是使用外部库,如

然后,只需在发布数据时处理或捕获错误

router.post('/api/login', (req, res) => {
    db.getUserToken(req.body)
      .then(function(result) {
          res.status(200).send(result);
      })
      .catch(function(error) {
          res.status(403).send(error);
      });
}); 

在您的
getUserToken
函数中,您正在调用
callback
,第一个参数为
err
-这
err
来自何处?在
result
@blaze-sahlzen中没有
error
属性,谢谢,是的,没有错误,愚蠢的错误。@Andreas,我知道,但如果用户发现它现在仍然有效,然后我会用新的值替换它。代码仍然有很多问题。你不需要
Q
,因为他已经在做承诺了。只是一些重构…@Andreas这正是我所说的,你可以使用本机Promise或像Q一样的库
router.post('/api/login', (req, res) => {
    db.getUserToken(req.body)
      .then(function(result) {
          res.status(200).send(result);
      })
      .catch(function(error) {
          res.status(403).send(error);
      });
});