Javascript Sails.js:services函数调用两次
刚开始了解sails.jsJavascript Sails.js:services函数调用两次,javascript,node.js,express,sails.js,Javascript,Node.js,Express,Sails.js,刚开始了解sails.jsservices的工作原理,但我调用了两次services函数 这是我的service.js module.exports = { getuserFavouriteArray:function (callback) { return callback('ok from service'); } } 我从我的控制器调用了这个服务 FavouriteService.getuserFavouriteArray(function (respon
services
的工作原理,但我调用了两次services函数
这是我的service.js
module.exports = {
getuserFavouriteArray:function (callback) {
return callback('ok from service');
}
}
我从我的控制器调用了这个服务
FavouriteService.getuserFavouriteArray(function (response) {
console.log(response);
});
它工作正常,但是我得到了console.log(响应)代码>消息两次
ok from service
ok from service
更新
深入研究这个问题,最终发现它不是服务的问题,因为控制器执行了多次,所以我将所有路由隐藏在我的route.js
中,并使用单个路由进行测试,但我仍然让控制器执行了两次
function (req,res) {
var sql = "SELECT a.title,a.image_name,a.id as art_id,COUNT(b.art_id) AS 'total_comments',COUNT(d.art_id) as total_favourite,a.base_price, a.total_share,CONCAT(c.first_name,' ',c.last_name) as artist_name FROM cushbu_art a LEFT JOIN cushbu_art_comments b ON a.id = b.art_id LEFT JOIN cushbu_mark_user_favorites d ON a.id = d.art_id LEFT JOIN cushbu_users c ON a.artist_id=c.id WHERE a.status=$1 AND a.category=$2 GROUP BY a.id";
sequelize.query(sql,{bind:[1,req.param('category')],type: Sequelize.QueryTypes.SELECT}).then(function (art) {
FavouriteService.getuserFavouriteArray(function (response) {
console.log(response);
});
res.view('arts/list-art-with-category',{'arts':art,category:req.param('category')});
}).catch(function (err) {
res.json({
'status':false,
'message':'An unexpected error in DB',
'err':err
})
})
}
路线
GET /:category': {controller:'ArtlistController',action:'breadCumbsCategory'}
我用一个新的服务文件和控制器文件尝试了您上面所说的,但无法复制它。我在控制台里只得到一次日志。你能再详细一点吗?也许你可以提供完整的代码,你使用这个控制器和路由等方法。我也测试了单路由,它仍然执行多次你的控制器方法需要很长时间来执行吗?(在回答之前)。如果是这样,浏览器可能会再次尝试,并重新触发该方法。另一个想法是,这是由表单提交触发的吗?可能您无意中提交了两次(一次是通过表单html自动完成的,一次是通过ajax或其他方式完成的)长时间上载,解决方案通常是在上载完成之前从控制器方法发回响应。虽然这很复杂,但这意味着当上传完成时,让网页做出反应将是一件困难的事情——涉及sockets或sails.io或其他内容。但是对于初学者来说,记住调用res.send(…)
并不会停止执行,之后可以在控制器中执行繁重的上传工作。