Почему моя функция обратного вызова всегда возвращает ошибку, а не ответ в каждом случае - PullRequest
0 голосов
/ 05 ноября 2018

Я изучаю узел и застрял, решая, почему обратный вызов всегда возвращается к ошибке

Вот мой код

todo.createTask(req,(err,resp)=>{
if(err){
    res.status(400).send(err);
}else{
    res.status(200).send(resp);
}
});

var createTask(req,callBack) =>{
    var model = new models({
    .
    .
    .
    .
    });

    model.save().then((doc)=>{
        callBack(doc);
    }).catch((err)={
        callBack(err);
    })
}

Я получаю успешное сообщение от Монго с кодом состояния 400, которое я использовал для ошибки.

Пожалуйста, помогите мне понять, что я делаю не так. Мое намерение здесь состоит в том, чтобы ответить кодом состояния 200 в случае успеха и кодом состояния 400 в случае ошибки.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Вам необходимо обновить ваш код следующим образом, чтобы указать, что ошибки не существует:

var createTask(req,callBack) =>{
    var model = new models({
    .
    .
    .
    .
    });

    model.save().then((doc)=>{
        callBack(null,doc); // here we are returning null as the error, so you say that everything was fine
    }).catch(callback) // since catch expects a callback we can just put the callback here
}
0 голосов
/ 05 ноября 2018

В двух случаях ваш обратный вызов называется:

callBack(doc);
callBack(err);

… в каждом из них вы передаете один параметр. Это присваивается аргументу first .

(err,resp)=>{

Таким образом, в каждом случае вы присваиваете что-то , которое является истинным значением err и ничто - resp.

Ваш if(err){ затем получает истинное значение из первого аргумента и ведет себя так, как вы сказали.

Если вы хотите избежать этого, вам нужно передать ложное значение в err и значение, которое вас волнует, в resp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...