我正在使用Sails的ORM(Waterline)。我写了一个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);
}
});
}
我创建了一个嵌入static
服务的geturl
对象,然后在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>
先谢谢你。
答案 0 :(得分:1)
解决方案写入.url(bool)
实例方法。请参阅how to write instance methods in Sails / Waterline。
这样我就可以从我的模板中直接访问此方法:a(href="#{ann.variete.url()}" title="#{ann.variete.name}") #{ann.variete.name}
。
完成!