gpt4 book ai didi

javascript - 在 Express 2.x 中的 dynamicHelper(或其他替代方案)中进行异步调用

转载 作者:搜寻专家 更新时间:2023-10-31 23:56:07 25 4
gpt4 key购买 nike

我正在尝试在我的布局 中显示用户收件箱的邮件总数。我在想我需要使用 Express 的 dynamicHelpers 来做到这一点,但在 Express <= 2.x 中,这些不是异步调用,我需要在它们内部做一些异步处理:在这个case,带回调的数据库调用。

我正在尝试以下操作将计数放在我的 session 中, session 本身放在 View 可访问的 dynamicHelper 中。但是,由于这些回调的异步性质,session.unreadMessages 始终未定义。

messageCount: function(req, res) {
var Messages = require('../controllers/messages'),
messages = new Messages(app.set('client'));

if(req.session.type === 'company') {
messages.getCompanyUnreadCount(req.session.uid, function(err, result) {
req.session.unreadMessages = result[0].unread;
});
} else if(req.session.type === 'coder') {
messages.getCoderUnreadCount(req.session.uid, function(err, result) {
req.session.unreadMessages = result[0].unread;
});
}

return;
}

是否有其他或更好的方法来执行此任务?

需要注意的是,req.session.unreadMessages定义的(至少在那个回调中),但是当调用session时是未定义的使用助手。

最佳答案

不确定,这将是“最佳方式”,但我习惯于使用过滤器(或所谓的中间件)在数据到达实际目的地之前加载数据,例如:

filters.setReqView = function(req,res,next) {
req.viewVars = {
crumb: [],
flash_notice: augument,
}

somethingAsync(function(err,data){
req.viewVars.someData = data
next()
})
}

app.all('*', filters.setReqView )


// then on my request:
...
res.render('auth/win', req.viewVars )

重构您的代码:

app.all('*', function(req, res, next) {
if(req.session && req.session.type){
var Messages = require('./controllers/messages'),
messages = new Messages(app.set('client'));

if(req.session.type === 'company') {
messages.getCompanyUnreadCount(req.session.uid, function(err, result) {
req.session.messageCount = result[0].unread;
next();
});
} else if(req.session.type === 'coder') {
messages.getCoderUnreadCount(req.session.uid, function(err, result) {
req.session.messageCount = result[0].unread;
next();
});
}
} else {
next()
}
});

关于javascript - 在 Express 2.x 中的 dynamicHelper(或其他替代方案)中进行异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8919920/

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