我一直在使用flash messages來完成Alex Young的教程。根據本教程,可以使用dynamicHelpers覆蓋默認的Flash消息格式。不幸的是,沒有提供關於正在發生的事情的細節,並且不可能在教程頁面上發佈任何評論以詢問相關問題。如何使用動態助手重寫express.js中的flash消息?
我沒有看到的是調用文件'app.js'中的req.flash()和文件'helpers.js'中導出的FlashMessage對象之間的關係。爲什麼在express.js中定期調用req.flash()(這是一個標準函數),首先鏈接到此FlashMessage原型?當我查看代碼時,我看不到這是如何發生的。
起初我以爲FlashMessage對象可能已經通過express.js提供給req.flash(),在這種情況下,我們只是在我們的幫助文件中擴展或覆蓋它。這個問題是,我無法在express.js的源代碼中找到任何對FlashMessage的引用。
如果有人能解釋給我,我會很感激。
閃光燈消息在文件 'apps.js' 通過調用設置:
req.flash('info', 'Document created.');
的FlashMessage obect導出 'helpers.js':
FlashMessage.prototype = {
// Get css definition string for icon.
get icon() {
switch (this.type) {
case 'info':
return 'ui-icon-info';
case 'error':
return 'ui-icon-alert';
}
},
// Get css class for message container.
get stateClass() {
switch (this.type) {
case 'info':
return 'ui-state-highlight';
case 'error':
return 'ui-state-error';
}
},
// Returns HTML formatted message.
toHTML: function() {
return '<div class="ui-widget flash">' +
'<div class="' + this.stateClass + ' ui-corner-all">' +
'<p><span class="ui-icon ' + this.icon + '"></span>' + this.messages.join(', ') + '</p>' +
'</div>' +
'</div>';
}
};
exports.dynamicHelpers = {
flashMessages: function(req, res) {
var html = '';
['error', 'info'].forEach(function(type) {
var messages = req.flash(type);
if (messages.length > 0) {
html += new FlashMessage(type, messages).toHTML();
}
});
return html;
}
};
在app.js文件中調用req.flash的完整路由功能如下:
// Attach dynamicHelpers to app.
app.dynamicHelpers(require('./helpers.js').dynamicHelpers);
// Routing function which calls req.flash.
app.post('/documents', loadUser, function(req, res) {
// Create Document object and assign value.
console.log('Document content: %s', req.body['document']);
var document = new Document(req.body['document']);
document.save(function() {
// Redirect to another page.
req.flash('info', 'Document created.');
res.redirect('/documents');
}
});
});
因此,簡單地說,我們使用req.flash將消息字符串附加到請求中,然後通過req.flash將它們提供給dynamicHelpers。當頁面呈現時,flashMessages作爲局部變量傳遞給jade模板。現在做出總體感覺。非常感謝。 – Benjen
沒問題,總是樂於幫忙! – alessioalex