javascript - 如何使用 koa ctx body 进行多重响应?
问题描述
我是 koa 和 postgresql 的新节点。我创建了一个用户登录 api,但出现 404 not found 错误。我的查询和检查工作正常,因为我在控制台上检查但 ctx.body 不起作用。我如何使用 koa ctx.body 处理多个响应?不知道为什么没有 ctx.body 工作。我们如何解决这个问题?希望你能理解我的问题。
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",
}
}
});
}
});
解决方案
关于您的 404 问题:HTTP 404 表示您的路由尚不存在。请确保您的router.post('/userLogin')
路由器实际上是通过app.use(router.routes())
.
参考您关于使用ctx.body
多个响应的问题:
您可以设置ctx.body
多次,但只有最后一个将在响应中使用。
例如:
ctx.body = 'Hello'
ctx.body = 'World'
此示例将以 响应World
。
您可以连接您的值以便将它们作为一个字符串/对象发送,或者在您控制读取流缓冲区的地方使用流式传输。检查https://stackoverflow.com/a/51616217/1380486和https://github.com/koajs/koa/blob/master/docs/api/response.md#responsebody-1以获取文档。
推荐阅读
- python-3.x - 如何将颜色条以 Seaborn Heatmap 的特定颜色居中?
- sql - ColdFusion Sanatize SQL
- google-cloud-storage - 如何等到工作完成或气流中的文件更新
- python - np.array 文本内存大小
- batch-file - 目录中使用的批处理变量感叹号 | 查找字符串
- excel - 左函数编译错误:参数不是可选的(VBA)
- sql - 使用动态 SQL 将表名作为输入的 Oracle SQL 过程
- java - 通过使用 android 应用扫描结果 id 检查产品 id(子 id)从 FirebaseRealtime-database 完全获取行数据
- java - 覆盖 0 Junit 5 春季启动测试
- jmeter - 如何使用 jmeter 为 SSE 创建负载测试?