2
我正在使用Sails的ORM(水線)。我寫了一個geturl
服務,應該返回我的應用程序中的幾個模型/動作的網址。我目前在我的模板中調用這個服務。從異步方法返回數據的服務
(正如我獨自開發這個,不要猶豫,警告我,如果這種設計模式是錯誤的)
現在它發生時水線的.find()
方法是異步的(因爲它應該)。在數據庫中插入或提取事物時,我總是使用回調函數來執行操作。
現在我已經看到everywhere,我不能從異步方法返回任何數據。因此我很困惑,因爲我想創建這個[該死的]服務來集中URL管理。
這裏是我當前的代碼:
module.exports = {
variete: function(id_objet) {
var string = '/default_url';
return onvariete(id_objet, function (err, url) {
if (err) {
sails.log.error('Error : ', err);
} else {
return url;
}
});
}
};
function onvariete(id_objet, next) {
var url = '/';
return Variete.findOne({id:id_objet}).exec(function (err, v) {
sails.log.info('URL Variety : '+ v.nom + '/' +id_objet + '/' + v.slug);
if (err) {
sails.log.error('Error : ' + v.nom + '/' + err);
// Do nothing.
return next(new Error('Variete error'), undefined);
} else if (!v) {
return next(new Error('Variete not found'), undefined);
} else if (!v.slug) {
// variete doesn't have a slug field
// we redirect to /v/:id
url += 'v/' + v.id;
return next (null, url);
} else {
// Ok variete has got a slug field
sails.log.info('GOT A SLUG! ' + v.slug);
url += 'variete/' + v.slug;
return next (null, url);
}
});
}
我做了一個static
對象嵌入我的geturl
服務,然後裏面翡翠的模板:
a(href="#{s.geturl.variete(ann.variete.id)}" title="#{ann.variete.name}") #{ann.variete.name}
,我可以得到這樣的:
<a title="Tomate Coeur de Boeuf" href="undefined">Tomate Coeur de Boeuf</a>
先謝謝您。