Node.js 帆的默认模型属性何时获得其值?
当sail填充我们在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的内容添加到这个默
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
那样全局地将时间戳