Articles of sails.js

这个代码可能会导致Node.js中的竞争状态吗?

我正在Sails.js(v0.12.13)中工作,我在控制器中的一个动作如下所示: create: function(req, res){ var comment = req.body; var image_id = req.params.id; Image.findOne(image_id).populate('comments').exec(function(err, image){ image.messages.add(comment); image.save(function(err){ return res.created(comment); }); }); } (error handling被忽略) 基本上,这增加了对image的comment 。 首先,我需要获取图像,并将其注释添加到数组中,然后再次保存。 然而,我的直觉是,有两种不同的人试图添加评论,事件的顺序是: 请求#1确实findOne()并被阻塞 请求#2确实findOne()并被阻塞 请求#1添加注释,执行save()并被阻塞 请求#2添加注释,执行save()并被阻塞 两个请求都具有相同的原始findOne()结果,并且他们添加了自己的注释,所以当它们保存时,只剩下最后一个。 这可以发生在Node.js? ,还是有什么可以防止这种情况发生? 我在网站上看到了一些例子,比如http://sailsjs.com/documentation/reference/waterline-orm/populated-values/add ,他们在这里做类似的事情。 如果竞争条件可能发生,那么Sail.js对我来说就变得不可用了,因为我发现这些事情非常重要。 提前致谢。

如何在Sails.js / Waterline中执行多对多的Where子句?

我有这个代码 Image.find({ tags: {id: 3}}).exec(console.log); 这是错误的,但我的意图是find所有的图像tag id 3 。 一个图像可以有很多标签,许多图像可以用相同的标签(多对多)来标记。 型号代码。 图片 module.exports = { attributes: { tags: { collection: 'Tag', via: 'images' } } }; 标签 module.exports = { attributes: { images: { collection: 'Image', via: 'tags' } } }; 我不想使用SQL原始查询,也不想使用N+1查询来填充所有内容。 我也尝试使用.populate()通过使用Image.find(3).populate("images")…但它只会填充图像,但每个图像不会有标签,所以这是行不通的我。

在config / routes.js中定义的路由获取404(未find)错误

只是学习与节点的风帆,并已遇到问题,我已经创build了所有的视图和我的用户控制器,但是当我点击注册,它需要我localhost/signup和404s我。 另外,去/user , /login , /quiz都以404结束。 这是我的意见文件夹内容: – 403.ejs – 404.ejs – 500.ejs – homepage.ejs – index.ejs – layout.ejs – quiz.ejs 我的注册方法应该路由我quiz.ejs ,但只是一种rest。 这些是我的自定义路线: module.exports.routes = { // HTML Views '/': { view: 'index' }, '/quiz': { view: 'quiz' }, // Endpoints 'post /login': 'UserController.login', 'post /signup': 'UserController.signup', '/logout': 'UserController.logout', }; 这些路由引用了我的UserController.js,它们具有login , logout和signupfunction,这里是这些function,这里是我的sign upfunction: […]

无法在SailJS中创build版本化的API

首先,各种依赖的版本 Ubuntu – 15.04 NodeJS – 6.10.3 NPM – 3.10.10 帆 – 0.12.13 其次,这是我做的: 1.全球安装帆 2.在/var/www目录下运行命令sails new app 3.在api/controllers/v1创build一个文件UserController.js 4.在api/models创build一个User.js文件 UserController.js的代码 module.exports = { findOne: function(req, res) { return res.send("Hello World!!! User -> findOne"); }, login: function(req, res) { return res.send("Hello World!!! User -> login"); } } User.js代码 module.exports = {} 现在,当我使用sails lift启动服务器时,会发生以下情况: 浏览http:// localhost:1337 […]

如何在sails控制器中获取当前套接字对象或id?

我想通过sails.js(v0.12)控制器函数访问当前连接的套接字id。 sails.sockets.getId(req.socket); 显示未定义,因为这不是一个套接字请求 我的目标是成功login后,将我的用户的在线状态设置在数据库中 login: function (req, res) { Util.login(req, function(){ var socketId = sails.sockets.getId(req.socket); console.log('socketId ===', socketId); // return undefined }); }, 基本上我想访问控制器中的当前用户的套接字对象或在套接字方法on访问当前用户的会话对象 另外,我不知道如何重写我的旧sockets.onConnect处理程序 onConnect: function(session, socket) { // Proceed only if the user is logged in if (session.me) { //console.log('test',session); User.findOne({id: session.me}).exec(function(err, user) { var socketId = sails.sockets.getId(socket); user.status = 'online'; user.ip = […]

req.logout,我必须传递什么参数

我的服务器在sailsjs上运行..它有一个注销function,如下所示: logout: function(few, res) { req.logout(); res.cookie("jwttoken","0"); res.json({"error":""}); } 我正在写一个QT程序,需要我authentication用户..我设法通过传递用户名和密码login请求的身体使用login身份..什么我需要通过要求注销成功?

NodeJS – 响应stream

我使用Sails.js构build了一个使用NodeJS的简单API端点。 当有人访问我的API端点时,服务器开始等待数据,每当出现新数据时,他都使用套接字广播它。 每个客户应该根据他的用户input接收他自己的数据stream。 var Cap = require('cap').Cap; collect: function (req, res) { var iface = req.param("ip"); var c = new Cap(), device = Cap.findDevice(ip); c.on('data', function(myData) { sails.sockets.blast('message', {"host": myData}); }); }); 响应没有完成(我从来没有发送res.json() – 实际上发生的事情是浏览器不断加载 – 但上述function)。 2问题: 我正尝试从我的客户端(使用RxJS)订阅和取消订阅此API端点。 当我订阅时,我开始通过套接字接收数据,但我不能退订API端点(浏览器期望完成请求)。 每个客户端都应该根据请求IP参数订阅他自己的套接字空间(请参阅更新后的代码)。 目前它把这个信息传达给每个人。 如何用Sails.js创build一个类似Stream / Service的API端点,并根据他的input向每个用户发送新的数据? 我的目标是能够从每个客户端订阅/取消订阅此API端点。

Node.js:路由优先和sorting(sails.js)

在我的sails.js应用程序中,我有两个这样的路线: '/': {controller:'HomeController',action:'home'}, 'GET /:category/:subcategory/:keyword':{controller:'SearchController',action:'index' 当我运行默认路由( / )时,它将始终执行此路由GET /:category/:subcategory/:keyword 。 为什么会这样? 路由文件中的路由顺序是 1) / 2) GET /:category/:subcategory/:keyword

Uber webhook签名问题nodeJs(hmac)

我有一些NodeJS的问题和Uber Sandbox的WebHooktesting。 我能够收到正确的POST响应,但是安全检查(X-Uber-Signature)总是错误的。 module.exports = { myWebService: function(req, res) { const hmac = crypto.createHmac('sha256','<MYSECRET>'); var hash = hmac.update(JSON.stringify(req.body)).digest('hex'); //Those values are always different.. console.log("Constructed hash : " + hash +"\n"); console.log("Received hash : " + req.header('X-Uber-Signature') + "\n"); JSON.stringify(req.body)内容: {"event_id":"08db06df-559a-457a-ba92-3c8380bb7ec7","resource_href":"https://sandbox-api.uber.com/v1/requests/8f5cc257-cfdf-4654-9acd-085aae740107","meta":{"status":"arriving","rider_id":"8IMl8ulC-yJTqkbsq5g4HuyuYeRQ5b5aSsmLt2vpjl6H8Fk_JPz_5AZYj4ERi6M7MagmrJtPM7L_rAnHLgO0qLgGtpD8Lg32rnGTEUkWHAbPjDZIl0-X91PrrujPY_IYGA==","user_id":"ecb2e871-b768-4f76-bfa9-8bc253bced0e","resource_id":"8f5cc257-cfdf-4654-9acd-085aae740107"},"event_type":"all_trips.status_changed","event_time":1508163555} 我尝试了许多(很多)这个string转换,但没有任何工作,如果任何人有一个想法,将不胜感激..谢谢

Heroku上的BabelJs:无法find相对于目录“/ app”的预设“env”

我有一个SailsJs在Heroku上的NodeJs的应用程序,我不能运行babeljs。 它在我的本地主机上运行正常,但我总是得到错误: 错误:无法find相对于目录“/ app”的预设“env” Heroku坚持在/app文件夹中查找itens。 这个项目没有一个/app文件夹 我的应用文件夹结构是: app_name – api – assets – config – tasks – views 我遵循http://babeljs.io的文档到我的.babelrc .babelrc 现在: { "presets": ["react", "env", "stage-1"], "plugins": ["transform-class-properties"] } 已经尝试: { "presets": ["react", "es2015", "stage-1"], "plugins": ["transform-class-properties"] } 当我设置.babelrc使用es2015我得到的错误: Invalid: `{ presets: [{option: value}] }` Valid: `{ presets: [['presetName', {option: value}]] }` 我已经安装了依赖关系 npm install […]