Tag: sails.js waterline

dynamic地定义并获取水线中的模型

我想知道在Waterline中是否有可能通过Node-ORM2中的名称来定义模型或获取模型。 定义: var Person = db.define("person", { name : String, surname : String, age : Number, // FLOAT male : Boolean, continent : [ "Europe", "America", "Asia", "Africa", "Australia", "Antartica" ], // ENUM type photo : Buffer, // BLOB/BINARY data : Object // JSON encoded }, { methods: { fullName: function () { return this.name […]

无法从sails.js填充的对象中删除数组

我无法delete或更改library对象的books属性的值。 Library.findOne(12).populate('books').populate('createdBy').exec( function(err,library) { delete library.createdBy; //worked delete library.name; //worked delete library.books; //no effect library.books = []; //worked library.books = [{a:'any val'}]; //just like library.books=[] console.log(library); }); 我的图书馆和createdBy模型就像 createdBy: { model: "createdBy" }, books: { collection: "books", via: "library", dominant: true } 我无法弄清楚这里发生了什么。

如何比较JSON对象和Waterline模型实例?

注意:我也在Waterline repo上为此打开了一个问题 ,但没有得到比我的解决方法更简单的解决scheme。 我有一个用户模型与所有的默认属性(例如createdDate , modifiedDate )和几个自定义的像emailAddress , password (压制toJSON() )等等,并与其他模型一些额外的关联。 将包含JSON格式的用户模型实例的控制器响应与水线模型实例进行比较的正确方法是什么? 例如,此解决方法工作: request .get('/user/1') .end(function (err, res) { expect(res.body).to.deep.equal( JSON.parse(JSON.stringify( // Workaround for toJSON not stringifying dates _.cloneDeep( // Workaround for associations being lost testUser.toJSON() // `testUser` is a Waterline model instance that should be equivalent to the requested data (`/user/1`) ) )) ); […]

在Sails.js中从相关模型访问模型的属性

我使用更新的数据库适配器(用于PostgreSQL)运行Sails.js的testing版(v0.10.0-rc3),以便通过水线ORM具有关联function。 我正在尝试根据不同的访问级别创build一个基于angular色的授权用户模型。 用户到angular色的关联是一对多的。 我的模特是: API /模型/ user.js的 module.exports = { attributes: { firstName: { type: 'string', required: true }, lastName: { type: 'string', required: true }, fullName: function() { return this.firstName + " " + this.lastName; }, email: { type: 'email', required: true, unique: true }, encryptedPassword: { type: 'string' }, role: { model: 'role' […]

从asynchronous方法返回数据的服务

我正在使用Sails的ORM(水线)。 我已经写了一个geturl服务,应该返回我的应用程序中的几个模型/动作的url。 我目前在我的模板中调用这个服务。 (正如我独自开发这个,如果这种devise模式是错误的,请不要犹豫提醒我) 现在Waterline的.find()方法是asynchronous的(它应该)。 在数据库中插入或提取事物时,我总是使用callback函数来执行操作。 现在我已经看到无处不在 ,我不能从asynchronous方法返回任何数据。 因此我感到困惑,因为我想创build这个[该死的]服务来集中URLpipe理。 这是我现在的代码: 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.js中,如何在模型的beforeCreate方法中访问会话variables?

这是我现在创build用户实体之前的用户模型,我想自动将值会话variables赋给createdBy和updatedBY。 module.exports = { autoPK: false, attributes: { id:{columnName:'ID', type: 'integer', autoIncrement: true, primaryKey: true}, employeeId:{columnName:'EMPLOYEE_ID', type: 'string',unique : true}, firstName:{columnName:'FIRST_NAME', type: 'string'}, lastName:{columnName:'LAST_NAME', type: 'string'}, createdBy:{columnName:'CREATED_BY', model: 'user'}, updatedBy:{columnName:'CREATED_BY', model: 'user'}, }, beforeCreate: function(values, cb) { values.createdBy=req.session.userId; values.updatedBy=req.session.userId; return values; }, beforeUpdate: function(values, cb) { values.updatedBy=req.session.userId; return values; }, }

如何优化循环插入数据库?

您好,我目前正在尝试从XML文件中插入我的MySql数据库中的数据。 我正在使用Sails.js和waterline进行查询。 我的表是用户和宠物,一个用户可以有多个宠物,一个宠物可以有多个用户(所有者),所以我的连接表是users_pets。 -I将XML文件转换为JavaScript对象,并通过循环来插入数据。 我的问题是,我需要循环是asynchronous的,因为我不希望重复logging在宠物表中。 对于每一个迭代,我检查宠物是否存在,如果不是,我创build它,否则我将其ID和插入到插入的用户。 如果不是asynchronous的,在数据​​库中会同时创build多个“findOrCreate”触发器和宠物副本。 我怎样才能优化这个代码? 125用户xml和他们的宠物大约需要85秒,这是巨大的。 XML: <users> <user> <pets> <pet> </pet> </pets> </user> … </users> 码: async.eachSeries(users, function(user, callback) { var pets = []; async.eachSeries(user.pets, function(pet, callback) { pets.findOrCreate({name: pet.name}).exec(function (err,userPet) { pets.push(userPet.id); callback(); }); }, function(err){ users.create({name: user.name, pets: pets}) .exec(function(err, created) { callback(); }); }); }, function(err){ … });

Sails.js:我可以将一些服务/模型打包为npm,并在Sails.js应用程序中加载npm?

我想创build两个不同的Sails.js应用程序,比如hello-world和hello-world-admin。 在两个应用程序中,我想让两个应用程序使用相同的服务/模型。 所以我想在hello-world应用中将服务/模型打包为npm,并将其加载到两个。 但Sails.js模型必须在提升阶段进行相应的扩展。 所以使用'require'根本不能满足它。 是否有任何正确/好方法来实现它(在两个应用程序中使用相同的模型)? 我想用钩子来扩展模型,但我找不到好的例子。 任何意见/信息将不胜感激。 更新 我试图使用“可安装的钩子”来扩展模型。 我在下面有index.js的node_modules中准备了sails-hook-models包。 module.exports = function(sails) { return { defaults: { }, initialize: function(cb) { var ModelA = require('./models/ModelA'); ModelA.identity = 'modela'; ModelA.globalid = 'ModelA'; var ModelB = require('./models/ModelB'); ModelB.identity = 'modelb'; ModelB.globalid = 'ModelB'; sails.models['modela'] = ModelA; sails.models['modelb'] = ModelB; return cb(); }, }; Sails解除后,模型已经被水线延伸,所以我可以通过sails.models ['modela']调用Model的方法。 […]

严格或在水线附近

Partie.find({ id: rez }).where({or : [ {enCours:false}, {mortSubite:false}] }) .exec(function(e, r) { res.json(200, r); }); 所以我的目标是select包含enCours的所有对象:false或者mortSubite:false。 所以我不想得到两个值都为false的对象。 这将返回这些,所以我怎么能做一个严格的

如何让所有控制器都可以使用Q等库?

我有点新的Sails / Node,但我使用Q库并行运行查询。 例如,我有一个控制器方法search结果,但也提供了响应对象中的logging总数: search: function(req, res) { //parse parameters var where = req.param('where') || {}; var limit = req.param('limit')|| 0; var skip = req.param('skip') || 0; //in case limit or skip are strings, convert to numbers if (limit) { limit = +limit; } if (skip) { skip = +skip; } //prepare query promises for […]