gpt4 book ai didi

node.js - 使用 exec 的 mongodb 错误处理

转载 作者:行者123 更新时间:2023-12-03 08:50:03 24 4
gpt4 key购买 nike

我有 ExpressJS、NodeJs、Mongoose 应用程序。
我已经编写了如下所示的 mongodb 代码,并且工作正常。

module.exports.getStudentid = function(id, callback) {

Student
.find({ _id: id })
.populate('marks')
.exec(callback);
}

但就 NodeJS 中的错误处理而言,它是一个好的代码吗?它会将错误传递给下一层吗?如何改进上述代码以使用正确的错误处理?

最佳答案

一件事应该是定义你的回调函数来支持你的错误。您的回调应如下所示:

function (err, student) {
if (err) {
// handle error err, will have your error
return;
}
return student;
}

你如何将它传递到下一层将取决于你在注释行中所做的事情......我的建议,将其更改为使用 promise :
const Q                 = require('q');
module.exports.getStudentById = function getById(id) {
let deferred = Q.defer();
Student
.find({ _id: id })
.populate('marks')
.exec(function doAfterExec(err, student){
if (err) {
deferred.reject(err);
}
deferred.resolve(student);
});
return deferred.promise;
}

然后调用它,假设您之前的模块称为 StudentIO
const io = require("StudentIO");
io.getStudentById(id)
.then(function doSuccess(result) {
console.log("yeeei!!!", result);
})
.fail(function doError(err) {
console.log("buuu", err);
});

如果您使用新的 =>,这可能会更干净。语法,但我没有包含它,因为不确定您是否正在使用它。所以我使用了常规的函数符号。

希望这可以带来一些启发。看看 Q 和 promises ......它可以很容易地摆脱回调 hell 场景。

关于node.js - 使用 exec 的 mongodb 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43460130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com