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",
}
}
});
}
});
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.