【发布时间】:2020-09-30 07:51:22
【问题描述】:
我在 node 中使用 sqlite3 包并开始清理我的 REST API。我决定在数据库调用和控制器中创建一个承诺包装器,使用 async/await 来调用这些函数并将返回值设置为一个变量。然后,检查变量并设置响应对象。对于成功案例,它运行良好,找到了一个东西并设置了响应。问题是,在 SQLITE3 中我很难检查错误。我在 DB 服务中对 undefined 进行了基本检查,如果遇到错误,它确实会引发错误,但是该错误会立即转到控制器的 CATCH 部分,并且不允许我将其包装在我想要的 API 响应中喜欢定义。这些是单独的文件(控制器与服务)。我没有找到很多关于 sqlite3 错误检查的有用信息,那里很少。理想情况下,该服务会抛出一个错误,然后我可以将其包装到一个标准化的响应对象中并发送。
------位置
const getById = async (req, res, next) => {
response = {};
try {
let location = await getLocationById(req.params.id); // <-- IF NO VALUE FOUND, location IS nothing
if (error) { // <----- THIS IS WHERE I'D LIKE TO CHECK FOR ERRORS.
response.status = 404;
response.message = 'Error attempting to get location';
} else {
response.status = 200;
response.message = 'Success';
response.data = location;
}
res.json(response);
} catch (error) {
res.json(response);
}
};
------------ 服务
const getLocationById = (id) => {
return new Promise((resolve, reject) => {
let sql = 'SELECT * FROM Locations WHERE id = ?;';
db.get(sql, [id], (error, location) => {
if (location !== undefined) {
resolve(location);
} else {
reject(new Error('Error attempting to get location by id'));
}
});
});
};
【问题讨论】:
标签: node.js node-sqlite3