我正在使用 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);
}
});
}
我创建了一个嵌入我的 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>
提前谢谢您。
最佳答案
解决方案是编写一个 .url(bool)
实例方法。请参阅how to write instance methods in Sails / Waterline .
这样我可以直接从我的模板访问此方法: a(href="#{ann.variete.url()}"title="#{ann.variete.name}") #{ann. variete.name}
.
完成!
关于node.js - 从异步方法返回数据的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26463552/