Express 原型访问被拒绝,正确的处理方法是什么&引用;x";不是",;“自有财产”;母公司的
与其他许多人一样,我在使用Sequelize与Express和Express Handlebar时也遇到了这个错误:Express 原型访问被拒绝,正确的处理方法是什么&引用;x";不是",;“自有财产”;母公司的,express,sequelize.js,handlebars.js,express-handlebars,Express,Sequelize.js,Handlebars.js,Express Handlebars,与其他许多人一样,我在使用Sequelize与Express和Express Handlebar时也遇到了这个错误: handlebar:已拒绝访问以解析属性“first_name”,因为它不是其父级的“自有属性”。 您可以添加运行时选项以禁用检查或此警告: 有关详细信息,请参阅 Handlebar:已拒绝访问以解析属性“last_name”,因为它不是其父级的“自有属性”。 您可以添加运行时选项以禁用检查或此警告: 有关详细信息,请参见 我找到了一些解决办法。ie:允许使用Protometho
handlebar:已拒绝访问以解析属性“first_name”,因为它不是其父级的“自有属性”。
您可以添加运行时选项以禁用检查或此警告:
有关详细信息,请参阅
Handlebar:已拒绝访问以解析属性“last_name”,因为它不是其父级的“自有属性”。
您可以添加运行时选项以禁用检查或此警告:
有关详细信息,请参见
我找到了一些解决办法。ie:允许使用Protomethods,或添加npm install@handlebar/允许原型访问
我想知道的是,有没有合适的方法来处理数据或从sequelize响应中排除proto方法
我可能没有正确理解手头的问题,如果是这样,我道歉。我只是在寻找解决这个问题的正确方法
编辑:为了进一步澄清,我正在寻求一种能够产生最安全的应用程序的方式
来自handlebarsjs.com:
使用这些属性可能会打开安全漏洞。
更新强>
我仍在努力解决这个问题,但我注意到了一个有趣的行为
嵌套对象似乎触发了此问题。
当在html页面上访问/呈现嵌套对象中的数据时,它似乎会触发(例如:{{contact.first_name}}
有时它会在对象中嵌套dataValues
对象,有时则不会
我会提供一个包含数据值的示例,但它已经有一段时间没有这样显示了
正在返回的对象:
{
"id": 3,
"email": "email2@email.com",
"password": "$2b$10$fOGiJC6NgUTR4qIt7/R7vuwpaFb3PUl9ks2vHBEkLnOUmRN0tEFue",
"kind": "user",
"createdAt": "2020-08-16T04:37:58.000Z",
"updatedAt": "2020-08-16T04:37:58.000Z",
"Contact": {
"id": 3,
"first_name": "Jane",
"last_name": "Doe",
"gender": "female",
"city": "Long Beach",
"state": "CA",
"zip": 12345,
"phone_number": 1234567891,
"createdAt": "2020-08-16T04:37:58.000Z",
"updatedAt": "2020-08-16T04:37:58.000Z",
"UserId": 3
},
"Props": []
}
let user = {
id: data[0].id,
email: data[0].email,
kind: data[0].kind,
createdAt: data[0].createdAt,
updatedAt: data[0].updatedAt,
};
let hbsObject = {
user: user,
contact: data[0].Contact.dataValues,
};
我不一定看到触发此错误消息的任何其他显式数据类型(这并不是说没有,但到目前为止,我传递的每种数据类型和脚本都没有引起问题)
我遇到问题的数据:此数据来自上面显示的Sequelize查询响应
记录此数据发生的情况:
{
"id": 3,
"email": "email2@email.com",
"password": "$2b$10$fOGiJC6NgUTR4qIt7/R7vuwpaFb3PUl9ks2vHBEkLnOUmRN0tEFue",
"kind": "user",
"createdAt": "2020-08-16T04:37:58.000Z",
"updatedAt": "2020-08-16T04:37:58.000Z",
"Contact": {
"id": 3,
"first_name": "Jane",
"last_name": "Doe",
"gender": "female",
"city": "Long Beach",
"state": "CA",
"zip": 12345,
"phone_number": 1234567891,
"createdAt": "2020-08-16T04:37:58.000Z",
"updatedAt": "2020-08-16T04:37:58.000Z",
"UserId": 3
},
"Props": []
}
let user = {
id: data[0].id,
email: data[0].email,
kind: data[0].kind,
createdAt: data[0].createdAt,
updatedAt: data[0].updatedAt,
};
let hbsObject = {
user: user,
contact: data[0].Contact.dataValues,
};
- 用户被查询,联系人被包含在该查询中,因此响应中有嵌套的对象/数据
{
"id": 3,
"email": "email2@email.com",
"password": "$2b$10$fOGiJC6NgUTR4qIt7/R7vuwpaFb3PUl9ks2vHBEkLnOUmRN0tEFue",
"kind": "user",
"createdAt": "2020-08-16T04:37:58.000Z",
"updatedAt": "2020-08-16T04:37:58.000Z",
"Contact": {
"id": 3,
"first_name": "Jane",
"last_name": "Doe",
"gender": "female",
"city": "Long Beach",
"state": "CA",
"zip": 12345,
"phone_number": 1234567891,
"createdAt": "2020-08-16T04:37:58.000Z",
"updatedAt": "2020-08-16T04:37:58.000Z",
"UserId": 3
},
"Props": []
}
let user = {
id: data[0].id,
email: data[0].email,
kind: data[0].kind,
createdAt: data[0].createdAt,
updatedAt: data[0].updatedAt,
};
let hbsObject = {
user: user,
contact: data[0].Contact.dataValues,
};
这很奇怪,因为有时当您在控制台中查看数据时,dataValues
将可见,有时则不可见。但是,当您按照上面所示的方式访问数据时,错误将被删除
当前结论
- 您试图通过Handlebar对象在Handlebar页面上访问的数据不得位于嵌套对象中
user
所做的那样),或者一次从对象1级发送数据(就像我对contact
所做的那样)
如果有人可以在此基础上构建或扩展其他信息,我将不胜感激!如果有更多信息,我将再次编辑。
更新2
对象数组不可访问,因为它是嵌套在数组中的对象列表。这使得{{#each x}}成为一个挑战。使用上述方法可以访问单个数据
更新3
我无法找到任何明确的解决方案。最后,我只允许带有把手/allow prototype access
包的proto方法
只要你是唯一一个可以访问你的模板的人/你绝对100%信任任何可以访问你的模板的人,那么这应该不是一个真正的问题。如果不是这样,我建议现在使用把手以外的东西