EL *_*OJO 4 javascript node.js loopbackjs
我有一个名为'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'
console.log( 'emailChanged' in ctx.instance );
// displays 'false'
console.log( ctx.instance.hasOwnProperty( 'emailChanged' ) );
// displays 'undefined'
console.log( ctx.instance.emailChanged );
// displays object properties including 'emailChanged'
console.log( ctx.instance );
// pass control back to loopback for upsert
// 'emailChanged' gets into MongoDB record
next();
}
}
Run Code Online (Sandbox Code Playgroud)
如果你们中的任何人都知道包含Loopback的JSFiddle类型的环境,我会把它扔进去.
删除不需要的属性
要从上下文对象中删除不需要的属性(字段),请使用以下命令:
ctx.instance.unsetAttribute('unwantedField');
Run Code Online (Sandbox Code Playgroud)
这样可以完全删除该字段并防止将虚假数据插入数据库.
应该这样做:
ctx.instance.unsetAttribute('emailChanged');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3476 次 |
| 最近记录: |