当从另一个js脚本调用方法时,如何处理节点mysql上的数据库延迟



我正在做一个示例API,使用路由和控制器(以mysql作为后端(进行课程,但我的一个方法没有按预期工作,但我不确定为什么。。。到目前为止,这是我的代码。

这是routes/courses.js(当我转到localhost/courses时,应用程序会调用它(:

var express = require("express");
var router = express.Router();
var coursesController = require("../controller/courses");
/* GET courses listing. */
router.get("/", function (req, res, next) {
res.json(coursesController.getAllCourses()).status(200).end();
});
module.exports = router;

这是我的控制器/courses.js

const mysqlPool = require("../db/database");
var Courses = {
getAllCourses: () => {
var sql = "select * from courses";
var res = null;
mysqlPool.getConnection((err, conn) => {
if (err) throw err;
try {
conn.query(sql, (error, results) => {
res = results;
console.log(error);
console.log(results);
console.log("returning res = "+res)
return res;
});
} catch (error) {
throw error;
}
});
console.log("not returned anything")
},
getSomeCourses: () => {},
};
module.exports = Courses;

我不知道为什么这没有像预期的那样奏效。数据库连接工作正常,它会得到结果,但当我试图将它们放在json中时,我只有一个空白屏幕。是我遗漏了什么吗?也许是一些异步功能之类的?

以下是console.log结果:

mycourses:server Listening on port 3000 +0ms
not returned anything
GET /courses 200 14.548 ms - -
null
[
RowDataPacket {
idcourse: 1,
name: 'Whatever 101',
description: 'A course about nothing',
thumbnail: null,
price: 10.99
},
RowDataPacket {
idcourse: 2,
name: 'Anything 101',
description: 'Course about idk',
thumbnail: null,
price: 9.99
}
]
returning res = [object Object],[object Object]

您肯定需要将getAllCourses转换为异步函数(使用new Promise(,然后在路由处理程序中更改您的代码,如下所示:

router.get("/", function (req, res, next) {
coursesController.getAllCourses().then(courses => {
res.json(courses); // there is no need to use status(200) and res.end if you use res.json
});
});

不要忘记为所有路线添加错误处理程序,或者在then之后添加catch调用,以在从DB 获取课程时处理错误

最新更新