我的app.js
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.
我如何打电话回电话?
答案 0 :(得分:2)
您可以将该函数包装为插入附加函数参数:
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);
});
答案 1 :(得分:0)
Express中的第三个arity始终保留用于next()
回调(如中间件中所示)。
如果你想要“回调”,但又不想搞砸快递,那就试试吧!
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中的export NODE_ENV=test