Почему я не могу использовать ctx.body в обратном вызове save ()? - PullRequest
0 голосов
/ 28 февраля 2020

Я могу использовать ctx.body в обратном вызове find():

router.post("/register/isNameUsed", async (ctx, next) => {
    let username = ctx.request.body.username;
    await userInfo.find({ username: username }, function(err, doc) {
        if (err) {
            console.log(err);
        } else {
            if (doc.length > 0) {
                ctx.body = { isNameUsed: true };
            } else {
                ctx.body = { isNameUsed: false };
            }
        }
    });

    await next();
});

Но я не могу использовать его в save() обратном вызове:

router.post("/register", async (ctx, next) => {
    let username = ctx.request.body.name;
    let password = ctx.request.body.password;
    var ui = new userInfo({
        username,
        password
    });
    await ui.save(function(err, doc) {
        if (err) {
            console.log(err);
        } else {
            ctx.body = { registerSuccess: true };//It doesn't work
        }
    });
    await next();
});

Код выполняется успешно, просто ctx.body не работает, почему?

1 Ответ

0 голосов
/ 28 февраля 2020

ОК , Я изменил свой код на это:

router.post("/register", async (ctx, next) => {
    let username = ctx.request.body.name;
    let password = ctx.request.body.password;

    var ui = new userInfo({
        username,
        password
    });

    try {
        let insertRes = await ui.save();
        ctx.body = { registerSuccess: true };
    } catch (error) {
        ctx.body = { registerSuccess: false };
    }

    await next();
});

Тогда ctx.body сработало.

И я никогда не напишу ctx.body в обратном вызове, это так неприятно ...

Но я до сих пор не знаю, почему ctx.body может работать в обратном вызове find(), а не в save() s?

...