ReferenceError:g未定义环回扩展模型

时间:2018-04-24 08:01:31

标签: loopbackjs

我遇到了与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": []
}

2 个答案:

答案 0 :(得分:0)

上面的错误(在这种情况下和我之前的问题)都是因为loopback无法解析模型的json文件。在这种情况下,它是type的{​​{1}}属性:

user

似乎"type": { "type" : "[string]", "required" : true, "default" : ["student"] }, 不能是一个数组。删除此默认值并在挂钩中强制执行此默认值可解决此问题。

答案 1 :(得分:0)

我遇到了一个与您相似的问题。是的,错误堆栈提供的有用信息太少了。它应该改为说:“请坚持使用环回类型”,因为这就是问题所在。您被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(因此它们应重新隐藏为数组和对象),只需将它们声明为Objects。