【发布时间】:2014-10-20 10:34:07
【问题描述】:
我正在使用 Sails 的 ORM(水线)。我写了一个geturl 服务,它应该返回我的应用程序中几个模型/动作的url。我目前正在我的模板中调用此服务。
(因为我一个人开发这个,如果这个设计模式是错误的,请不要犹豫警告我)
现在 Waterline 的 .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);
}
});
}
我创建了一个嵌入我的geturl 服务的static 对象,然后在Jade 模板中:
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>
提前谢谢你。
【问题讨论】:
标签: node.js asynchronous functional-programming sails.js waterline