Jestem nowy w węźle z koa i postgresql. Utworzyłem interfejs API logowania użytkownika, ale otrzymuję błąd 404 nie znaleziono. Moje zapytania i czeki działają tak, jak sprawdzałem na konsoli, ale ctx.body nie działa. Jak mogę obsłużyć wiele odpowiedzi za pomocą koa ctx.body? Nie wiem, dlaczego nie działa żaden ctx.body. Jak możemy rozwiązać ten problem? Mam nadzieję, że rozumiesz mój problem.


router.post('/userLogin', async (ctx) => {

    var email = ctx.request.body.email;
    var password = ctx.request.body.password;

    if (
        !email ||
        !password
    ) {
        ctx.response.status = 400;
        ctx.body = {
            status: 'error',
            message: 'Please fill all the fields'
        }
    } else {

        await ctx.app.pool.query("SELECT * FROM users WHERE email = $1",
            [`${email}`],
            async (err, result) => {
                if(err){
                    console.log(err);
                    throw err;
                }
                if (result) {
                   await bcrypt.compare(password, result.rows[0].password).then(function (res) {

                        if (res === true) {
                            ctx.body = {
                                status: 200,
                                message: "User login successfully",
                                data: result.rows[0],
                            };
                        }else{
                            ctx.body = {
                                status: 400,
                                message: "Incorrect password",
                            }
                        }
                    });
                }else{
                    ctx.body = {
                        status: 400,
                        message: "Invalid email",
                    }
                }
            });
      }
});
4
Daniyal Mughees 19 grudzień 2019, 14:02

1 odpowiedź

W odniesieniu do twojego problemu 404: HTTP 404 oznacza, że ​​Twoja trasa jeszcze nie istnieje. Upewnij się, że Twój router router.post('/userLogin') jest rzeczywiście rejestrowany za pośrednictwem app.use(router.routes()).

Odnosząc się do Twojego pytania w odniesieniu do używania ctx.body dla wielu odpowiedzi:

Możesz ustawić ctx.body wiele razy, ale tylko ostatnia zostanie użyta w odpowiedzi.

Na przykład:

ctx.body = 'Hello'
ctx.body = 'World'

Ten przykład odpowie World.

Możesz połączyć swoje wartości, aby zostały wysłane jako jeden ciąg/obiekt, lub użyć przesyłania strumieniowego, w którym kontrolujesz bufor strumienia odczytu. Sprawdź https://stackoverflow.com/a/51616217/1380486 i https://github.com/koajs/koa/blob/master/docs/api/odpowiedź .md#responsebody-1 dla dokumentacji.

1
Steven 15 marzec 2020, 20:14