Koa和Express的API调用之间的差异

问题描述 投票:0回答:1

以前我曾与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 = ...

express async-await koa
1个回答
0
投票

Koa都是围绕诺言而设计的。请求处理程序本身是async,这意味着它返回一个Promise,当Promise解析时,框架中会发生各种事情。因此,您不能随意地将简单的异步回调与Promise混合使用。

© www.soinside.com 2019 - 2024. All rights reserved.