的before save和after save操作的钩有一个data或instance含那将被改变的部分数据或模型实例属性。看这里。如何访问before delete挂钩中的模型实例?
即将发生的情况:删除特定模型后,我想删除相关项目。
我在我的服务器(ubuntu)上安装了loopback,然后创建了一个应用程序并使用命令slc run来运行......一切都按预期工作.现在我有一个问题,也是我面临的一个问题:
问题:我需要使用slc run命令,但在关闭终端后也要保持应用程序"活着".为此,我使用了--detach选项并且它可以工作,我想知道--detach选项是最佳实践还是我需要以不同的方式进行.
问题:在我使用--detach之后,我真的不知道如何阻止它.是否有一个命令可以用来阻止进程运行?
我已经在环回中继承了这样的模型-
{
"name": "MyModel",
"base": "AnotherModel",
"idInjection": false,
"properties": {
"value": {
"type": "String"
},
"display": {
"type": "String"
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": []
}
Run Code Online (Sandbox Code Playgroud)
虽然我可以AnotherModel从MyModel.js文件中调用所有的远程方法。但是,AnotherModel我的浏览器中没有显示的远程方法。如何使继承的模型的所有远程方法显示在资源管理器中?
我有一个名为'ctx.instance'的对象,它具有以下属性:
firstName: 'Ron',
lastName: 'Santo',
minor: true,
accepted: false,
emailChanged: false,
organizationId: 000000000000000001000001,
isDeleted: false,
userId: 55e17a46e410f9603cea515b
Run Code Online (Sandbox Code Playgroud)
这个对象被传递到我的函数中.在将其保存到数据库之前,我需要剥离'emailChanged'属性.所以我这样做了:
delete ctx.instance.emailChanged;
Run Code Online (Sandbox Code Playgroud)
delete返回'true',表示该属性不存在.
删除后的以下语句产生false,这也意味着它应该消失:
'emailChanged' in ctx.instance
Run Code Online (Sandbox Code Playgroud)
但是,如果我执行console.log(ctx.instance),'emailChanged'属性仍然存在,并将其保存到数据库中.
如果我检查属性的属性,它说它是可配置的.如果我在delete语句之后执行console.log(ctx.instance.emailChanged),则会显示"undefined".
它为什么还在那里?
我在互联网上搜索过,尝试了很多不同的东西,我找不到为什么会这样.这发生在Node环境中.
更新: 数据库是Mongo.我正在使用Loopback.js模型和框架.
数据变量是通过PUT从客户端提交给服务器的对象.数据对象最初是JSON,但Loopback使其成为JavaScript对象.
代码在操作挂钩中,因此对DB的保存不在此函数中.
在我将函数传递回框架之前,'delete'语句是函数中的最后一个语句.
这是钩子的最小代码:
module.exports = function( Member )
{
Member.observe( 'before save', upsertMember );
function upsertMember( ctx, next )
{
// displays 'true'
console.log( ctx.instance.hasOwnProperty( 'emailChanged' ) );
// displays 'false'
console.log( ctx.instance.emailChanged );
var isDeleted = delete ctx.instance.emailChanged;
// displays 'true'
console.log( isDeleted );
// displays 'false' …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个基于内置的新用户模型.我正在尝试这个:
module.exports = function(TiUser) {
TiUser.on('dataSourceAttached', function(obj) {
var login = TiUser.login;
TiUser.login = function(credentials, include, cb) {
var result = login.apply(this, credentials);
// Do my stuff
cb(null, my_data);
};
});
};
Run Code Online (Sandbox Code Playgroud)
但我无法让它发挥作用......出了什么问题?或者这怎么可能做得对?
谢谢
我正在一个使用Loopback作为框架的项目,其中包括用户和身份验证。我添加了生成并通过电子邮件发送的密码重置路由,并且一切似乎都正常运行。最近,我发现密码重置似乎不起作用。此处重置密码的过程是:
预期的行为是密码将在密码重置表单上更新。相反,我收到了401或500的授权错误(似乎来回了)。我注意到在发送给API的实际标头中,授权令牌与我从路由传递的内容不匹配。尝试使用LoopBackAUth.setUser进行设置无效,并且在实际发送请求之前也不会更新授权属性。
第一次添加时,我肯定会花时间测试它,但我不知道要改变什么才能打破它。我一直在遵循loopback-faq-user-management中的示例,但是在该示例中,我们有一个Angular前端而不是服务器侧视图。
编辑:
我尝试完全打开ACL,以查看是否可以更新用户对象(继承自User,但它是自己的类型)的密码(或任何属性)。尝试执行此操作时,我仍然收到401。
编辑#2:
这是我的ACL和有关如何调用此代码的示例代码。
来自模型定义的ACL
...
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW"
},
{
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW",
"property": "updateAttributes"
}
...
Run Code Online (Sandbox Code Playgroud)
auth.js
...
resetPassword: function(user) {
return MyUser.prototype$updateAttributes(user, user).$promise;
}
...
Run Code Online (Sandbox Code Playgroud) 当我们有模型并且我们想将它迁移到数据库时,我们只需在server/boot中创建脚本:
server.dataSource['myDbSource'].automigrate('MyMode', function(err){...})
Run Code Online (Sandbox Code Playgroud)
要么
server.dataSource['myDbSource'].autoupdate('MyMode', function(err){...})
Run Code Online (Sandbox Code Playgroud)
每个服务器上的第一个重新启动,在db中重新创建模式并清除数据,第二个可以创建模式或更改它(如果存在),但不是清除数据.当我们使用automigrate创建模式时,我们应该删除它(或者每次我们的数据都会丢失),但是当我们使用autoupdate时它可以保留在代码中(我们可以修改模型和模式将被更新).
看起来autoupdate更有用.当我们必须使用automigrate时呢?autoupdate是否有缺点支持automigrate?
我喜欢仅使用自动启动的工作流程,但只有在我决定时才设置env标志来更新模式.你怎么看?
是否可以使用loopback email数据源发送附件?
我在源文档中看到的只有以下字段:
我只想对每个帐户计划制定一个API请求速率限制,所以可以说我们有一个用户,每个用户都有一个计划,该计划对每天可以发出的API请求有一定的限制。
所以现在,我该如何在环回3.x中制定API限制政策。
谢谢
有什么自动方法可以将Loopback 3中的项目迁移到Loopback 4?例如,我在JSON中有模型定义:
{"name": "Item",
"base": "PersistedModel",
"forceId": true,
"properties": {
"id": {
"type": "number",
"id": true
},
"created": {
"type": "Date",
"postgresql": {
"dbDefault": "now()"
}
},
"name": {
"type": "string",
"required": true
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以在LB4中自动创建相同的模型?
loopbackjs ×10
node.js ×4
strongloop ×4
javascript ×3
angularjs ×1
express ×1
login ×1
nodemailer ×1
overriding ×1
rest ×1