Node.js 帆的默认模型属性何时获得其值?

Node.js 帆的默认模型属性何时获得其值?,node.js,model,sails.js,Node.js,Model,Sails.js,当sail填充我们在config/models.js上添加的默认全局属性时, 默认设置如下所示: attributes: { id: { type: 'number', autoIncrement: true }, createdAt: { type: 'number', autoCreatedAt: true }, updatedAt: { type: 'number', autoUpdatedAt: true }, } 现在,如果我们将类似于creatorId的内容添加到这个默

当sail填充我们在
config/models.js
上添加的默认全局属性时, 默认设置如下所示:

attributes: {
  id: { type: 'number', autoIncrement: true },
  createdAt: { type: 'number', autoCreatedAt: true },
  updatedAt: { type: 'number', autoUpdatedAt: true },
}
现在,如果我们将类似于
creatorId
的内容添加到这个默认属性中,我们应该如何为所有
模型
填充一次

attributes: {
  id: { type: 'number', autoIncrement: true },
  createdAt: { type: 'number', autoCreatedAt: true },
  updatedAt: { type: 'number', autoUpdatedAt: true },
  creatorId: { type: 'number'}
}

更改后,所有模型都有
creatorId
0
值,如何在保存之前将
userId
设置为所有模型
creatorId
,而不重复我自己?

在控制器中,您正在数据库中创建条目,这应该非常简单。让我们假设您有两个模型,
User
,它带有Sails内置的身份验证,还有一个
东西,一个是某人可以拥有的东西

东西
模型中,我将
所有者ID
更改为
所有者
,并将其与
用户
模型关联,如下所示:

属性:{
id:{…},
createdAt:{…},
更新日期:{…},
所有者:{
模型:“用户”,
必需:是//当数据库中的所有内容都有此集合时启用此选项
},
}
如果您了解数据库术语,这将创建关联或一对多关系

现在,在创建要插入的对象的控制器中:

Thing.create({
  someAttribute: inputs.someValue,
  someOtherAttribute: inputs.someOtherValue,
  owner: this.req.me.id
});
如果要立即使用创建的对象,请将
.fetch()
附加到
.create({…})
之后的链中,如下所示:

var thing = await Thing.create({ ... }).fetch();
如果有不清楚的地方,请告诉我

事实上,我建议你把这9美元投资于购买赛尔斯球场。这是一门官方课程,由SailsJS的创始人迈克·麦克尼尔教授。它让您从
npm i sails-g
到在Heroku云平台上投入生产。它教授基本的Vue(parasails味道),使用邮枪、条纹付款等。他们链接到网站上的课程

更新 做了进一步的挖掘,并受到了两个类似案例的启发

您可以使用一个自定义方法来扩展模型,该方法封装了
.create()
方法。此方法可以从控制器接收请求对象,但这样做,而不是前面的建议,可能比只向现有调用添加
ownerId:This.req.me.id,
要复杂得多。不管怎样,我都要示范

//您的模型
module.exports={
属性:{…},
proxyCreate(请求、回调){
如果(!requ.body.ownerId){
req.body.ownerId=req.me.id//或req.user.id,不记得了
//哪一个在这里有效
}
创建(request.body,callback);
}
}
在控制器中:

。。。
//更改为:
创建(请求主体);
//致:
proxyCreate(req);
...
更新#2 我的另一个想法是在每个路由的基础上添加中间件。我不知道路由的复杂性,但您可以仅为这些路由创建自定义中间件

router.js
中编辑路由(为了简洁起见,我将显示一条):

。。。。
“POST/api/v1/things/upload thing”:[
{操作:'helpers/adduserid to ownerid'},
{动作:“新事物”}
],
....
helpers/将userid添加到ownerid中

module.exports:{
fn:功能(请求、恢复){
如果(!requ.body.ownerId){
req.body.ownerId=req.me.id;
}
}
}

要将其设置为什么?一个默认值,或者你想传递它吗?@Canis我想将当前登录的
用户id设置为它,可以在
req.user.id
上访问,谢谢Canis,但这样我应该为每个
填充
所有者
属性。创建我的模型的
像:
Thing1
Thing2
内容3
。有没有其他方法像中间件一样在每次
调用之前设置属性?创建
调用?@Jafarrezaei我必须承认我很困惑。您是否在没有数据输入的情况下创建模型?仅使用默认值?我也不确定为什么在
.create()
调用中设置属性是一个问题,因为这是您设置所有其他数据的地方。是的,您是对的,
.create()
是我们设置所有数据的地方,但我需要在所有模型上设置自动生成的值(ownerId),而无需在创建方法中提及它们,比如
createdAt
updatedAt
works@Jafarrezaei您说过ownerid应该是当前登录用户的id。该id是
req.me.id
。现在,您希望它是由数据库自动生成的随机生成的值。我又糊涂了。您能更详细地解释一下您的具体用例吗?是的,我想在该属性中使用用户id,我想
createdAt
时间戳是由
sails
处理的,而不是数据库,我正在寻找sails设置时间戳的位置,并考虑制作一些代码来附加用户id,而不是像
createdAt
那样全局地将时间戳