koa接收post参数返回数据库数据时候数据返回慢了导致404

发布于 2022-09-11 23:04:22 字数 1251 浏览 22 评论 0

我是用koa-generator koa应用生成器,在获取数据库数据时,我拿到数据库数据设置body的时候,这个时候就会提示404。

这个是操作数据库简单弄的一个函数:

exports.query = function (arr=null) {
    if (!arr.sql) {
        return false;
    };
    new Promise((resolve, reject) => {
        pool.getConnection(function (err, connection) {
            connection.query(arr.sql, (error, results, fields) => {
                resolve(results)
                if (error) throw error;
            })
        });
    }).then(res => {
       arr.get && arr.get(res);
    }).catch(err => {
        console.log(err)
    })

};

这个是设置body的代码:

router.post("/pid", function* (next) {

    var _this = this;

    db.query({
        sql: "SELECT id FROM book", get: res => {
            _this.body = res;
            //控制台能打印出res是数据库的数据
        }
    });//这样404

    new Promise((resolve, reject) => {
        db.query({
            sql: "SELECT id FROM book", get: res => {
                resolve(res)
            }
        });
    }).then(res => {
        _this.body = res;
    }).catch(err => {
        console.log(err)
    })//这样也是404

});

问题我觉得应该是数据库数据还没返回过来,前端就已经请求完成。 这个问题请问大佬们怎么解决。第一次用这个,实在是不知道怎么解决。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

汐鸠 2022-09-18 23:04:22
exports.query = function (arr=null) {
    if (!arr.sql) {
        return Promis.reject('sql语句为空');
    };
    return new Promise((resolve, reject) => {
        pool.getConnection(function (err, connection) {
            connection.query(arr.sql, (error, results, fields) => {
                if (error) reject(error)
                resolve(results)
            })
        });
    })
};

query这个函数封装得太烂了,再改改吧。

router.post("/pid", function* (next) {
    db.query({sql: "SELECT id FROM book"}).then(res => {
        this.body = res
    }).catch(err => {
        this.body = err
        console.log(err)
    })
});

试试koa2的写法
应该是koa-generator用法出了问题

koa2

router.post("/pid", async(ctx,next) => {
   let data = await db.query({sql: "SELECT id FROM book"})
   ctx.body = data;
})

koa1

router.post("/pid", function* (next) {
    this.body = yield db.query({sql: "SELECT id FROM book"})
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文