【问题标题】:ReferenceError: g is not defined loopback extended modelsReferenceError: g 未定义环回扩展模型
【发布时间】:2018-04-24 08:01:30
【问题描述】:

我遇到了与my previous question 几乎相同的问题。创建user模型时,返回如下错误:

ReferenceError: g is not defined
    at new ModelConstructor (eval at createModelClassCtor (/usr/src/app/node_modules/loopback-datasource-juggler/lib/model-builder.js:671:21), <anonymous>:10:27)
    at user.ModelBaseClass._initProperties (/usr/src/app/node_modules/loopback-datasource-juggler/lib/model.js:349:28)
    at user.ModelBaseClass (/usr/src/app/node_modules/loopback-datasource-juggler/lib/model.js:60:8)
    at user.Model (eval at createModelClassCtor (/usr/src/app/node_modules/loopback-datasource-juggler/lib/model-builder.js:671:21), <anonymous>:12:24)
    at user.PersistedModel (eval at createModelClassCtor (/usr/src/app/node_modules/loopback-datasource-juggler/lib/model-builder.js:671:21), <anonymous>:12:24)
    at user.User (eval at createModelClassCtor (/usr/src/app/node_modules/loopback-datasource-juggler/lib/model-builder.js:671:21), <anonymous>:12:24)
    at new user (eval at createModelClassCtor (/usr/src/app/node_modules/loopback-datasource-juggler/lib/model-builder.js:671:21), <anonymous>:12:24)
    at Function.DataAccessObject.create (/usr/src/app/node_modules/loopback-datasource-juggler/lib/dao.js:359:13)
    at /usr/src/app/node_modules/loopback-datasource-juggler/lib/dao.js:1262:13
    at /usr/src/app/node_modules/loopback-datasource-juggler/lib/dao.js:2175:62
    at /usr/src/app/node_modules/loopback-datasource-juggler/lib/dao.js:2111:9
    at /usr/src/app/node_modules/loopback-datasource-juggler/node_modules/async/dist/async.js:1012:9
    at /usr/src/app/node_modules/loopback-datasource-juggler/node_modules/async/dist/async.js:359:16
    at eachOfArrayLike (/usr/src/app/node_modules/loopback-datasource-juggler/node_modules/async/dist/async.js:928:9)
    at eachOf (/usr/src/app/node_modules/loopback-datasource-juggler/node_modules/async/dist/async.js:990:5)
    at _asyncMap (/usr/src/app/node_modules/loopback-datasource-juggler/node_modules/async/dist/async.js:1005:5)
    at Object.map (/usr/src/app/node_modules/loopback-datasource-juggler/node_modules/async/dist/async.js:995:16)
    at allCb (/usr/src/app/node_modules/loopback-datasource-juggler/lib/dao.js:2025:13)
    at /usr/src/app/node_modules/loopback-connector-mongodb/lib/mongodb.js:1155:9
    at result (/usr/src/app/node_modules/mongodb/lib/utils.js:414:17)
    at executeCallback (/usr/src/app/node_modules/mongodb/lib/utils.js:406:9)
    at handleCallback (/usr/src/app/node_modules/mongodb/lib/utils.js:128:55)

这是我的模型:

user.json

{
  "name": "user",
  "plural": "users",
  "base": "User",
  "idInjection": false,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "id": {
      "type" : "string",
      "id" : true,
      "required" : true,
      "defaultFn" : "guid"
    },
    "type": {
      "type" : "[string]",
      "required" : true,
      "default" : ["student"]
    },
    "full_name": {
      "type": "string",
      "required": false
    },
    "office" : {
      "type": "string",
      "required" : false
    },
    "profile_img": {
      "type": "string",
      "required": false
    },
    "departmentId": {
      "type": "string",
      "required": false
    }
  },
  "validations": [],
  "relations": {
    "department": {
      "type": "belongsTo",
      "model": "department"
    },
    "syncedcalendar" : {
      "type" : "hasMany",
      "model" : "syncedcalendar"
    },
    "accessTokens": {
       "type": "hasMany",
       "model": "accessToken",
       "foreignKey": "userId",
        "options": {
          "disableInclude": true
        }
     }
  },
  "acls": [],
  "methods": {}
}

accessToken.json

{
  "name": "accessToken",
  "plural": "accessTokens",
  "base": "AccessToken",
  "properties": {},
  "validations": [],
  "idInjection": false,
  "relations": {
    "user": {
      "type": "belongsTo",
      "model": "user",
      "foreignKey": "userId"
    }
  },
  "acls": [],
  "methods": []
}

【问题讨论】:

标签: loopbackjs


【解决方案1】:

上面的错误(在本例和我之前的问题中)是因为环回无法解析模型的 json 文件。在这种情况下,它是usertype 属性:

"type": {
  "type" : "[string]",
  "required" : true,
  "default" : ["student"]
},

看来default 不能是数组。删除此默认设置并在挂钩中强制执行此默认设置解决了该问题。

【讨论】:

  • 我们如何在挂钩中强制执行此默认设置以解决问题?
  • @sifavahora 在Model.observe("before save"...) 中,您可以检查是否设置了type。如果未定义,则设置为["student"]
【解决方案2】:

我遇到了一个与您类似的问题。是的,错误堆栈提供的有用信息太少。它应该改为:“请坚持使用 Loopback 类型”,因为这就是问题所在。你被Loopback types困住了。

在您的情况下,解析器无法处理数组。好吧,事实证明它也不会解析无法识别的类型字符串。例如,如果您尝试将属性声明为integer

 "id":
    {
      "type": "Integer", <-----  not a loopback type
      "id": 1,
      "mysql":
      {
        "columnName": "id",
        "dataType": "int",
     }
  },

它会抛出,因为本机类型是Number。您可以将format 设为整数,但不要乱用它的type

 "id":
    {
      "type": "Number",  <----  one of loopback types. Integer is not one of them
      "id": 1,
      "mysql":
      {
        "columnName": "id",
        "dataType": "int",
      }
      "format":"integer" <---- here's where you can format or cast as desired
  },

如果您的数据库值是 json-like(因此它们应该作为数组和对象重新隐藏),只需将它们声明为对象。

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
  • @DebanjanB 我的回答写得不好,我很抱歉。但是我想表明这不是数组属性与文本属性的问题。如果文本值不在 Loopback 的白名单中,也会引发错误。我重写了大部分答案,但如果更多人认为合适,我愿意将其删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 2014-08-20
  • 1970-01-01
  • 2020-07-08
  • 2023-04-04
  • 1970-01-01
  • 2020-01-04
相关资源
最近更新 更多