Node.js Express.js get中的自定义回调
我的app.js中有一个getNode.js Express.js get中的自定义回调,node.js,express,Node.js,Express,我的app.js中有一个get app.get('/api/personnel', api.personnel); 调用此函数作为从mongo加载某些数据的回调: exports.personnel = function(req, res) { var docs; db.personnel.find(function(err, docs) { if (err) { logError(err); } else { res.json({
app.get('/api/personnel', api.personnel);
调用此函数作为从mongo加载某些数据的回调:
exports.personnel = function(req, res) {
var docs;
db.personnel.find(function(err, docs) {
if (err) {
logError(err);
} else {
res.json({
personnel: docs
});
}
});
};
这很好,但我真的希望能够在函数完成后调用回调进行测试:
exports.personnel = function(req, res, callback) {
var docs;
db.personnel.find(function(err, docs) {
if (err) {
logError(err);
} else {
res.json({
personnel: docs
});
}
callback();
});
从实时应用程序调用函数时,callback()
为空,并显示错误:
Error: Can't set headers after they are sent.
如何让get调用调用我的回调?您只需包装该函数即可插入附加的函数参数:
exports.personnel = function(req, res, callback) {
var docs;
db.personnel.find(function(err, docs) {
if (err) {
logError(err);
} else {
res.json({
personnel: docs
});
}
});
///////////////////////////////////////////////////
var callback = ...;
pp.get('/api/personnel', function(req, res) {
api.personnel(req, res, callback);
});
Express中的第三个arity总是保留给
next()
callback(在中间件中可以找到)。
如果你想“回调”,但又不想搞砸express,那就让我们黑客吧
exports.personnel = function(req, res, callback) {
var docs;
db.personnel.find(function(err, docs) {
if (err) {
logError(err);
} else {
res.json({
personnel: docs
});
}
if(process.env.NODE_ENV === 'test')
callback();
});
然后,当您想要测试时,shell中的导出节点_ENV=testExpress中的第三个arity总是保留给
next()
callback(如中间件中所示)Express仍将使用三个参数调用处理程序,即使您没有声明第三个回调函数,Thakk you@robertklep+1但是回调函数
仍然是Express传递的下一个
回调函数,而不是用户提供的回调函数…if(process.env.NODE_env=='test')
,这意味着在生产环境中,该函数不会被调用,也不会造成任何伤害,在(单元)测试中,开发人员直接测试导出人员