Express 原型访问被拒绝,正确的处理方法是什么&引用;x";不是",;“自有财产”;母公司的

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

与其他许多人一样,我在使用Sequelize与Express和Express Handlebar时也遇到了这个错误:

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%信任任何可以访问你的模板的人,那么这应该不是一个真正的问题。如果不是这样,我建议现在使用把手以外的东西