以前我曾与Express一起工作,现在学习Koa。
在Express中,当我做了一个简单的get方法时。以下代码有效
.get('/applications', (req, res, next) => {
const getTable = `SELECT * FROM applicationtable`
db.query(getTable, values, (err, result) => {
if (err) {
console.log(err)
}else {
res.json(result)
}
})
})
但是,当我尝试在Koa中使用]进行相同的操作时>
.get('/applications', (ctx, next) => { const getTable = `SELECT * FROM applicationtable` db.query(getTable, values, (err, result) => { if (err) { console.log(err) }else { ctx.body = result } }) })
它返回404错误。我必须用一个承诺将上面的内容明确地包装在Koa中,并等待异步,然后它才能工作,如下所示:
.get('/applications', async(ctx, next) => { const getTable = `SELECT * FROM applicationtable` const item = await new Promise(function(resolve, reject) { db.query(getTable, (err, result) => { if (err) { reject(err) }else { resolve(result) } }) }) ctx.body = item; })
我的问题是,为什么在Express中不必将代码显式包装在异步等待中?在这里的示例中,Koa的行为方式与Express有所不同吗?
[以前我曾与Express合作,现在学习Koa。在Express中,当我做了一个简单的get方法时。以下代码有效。.get('/ applications',(req,res,next)=> {const getTable = ...
Koa都是围绕诺言而设计的。请求处理程序本身是async
,这意味着它返回一个Promise,当Promise解析时,框架中会发生各种事情。因此,您不能随意地将简单的异步回调与Promise混合使用。