使用Loopback 3.8.0时,“scopes”列不存在

时间:2017-05-05 05:06:49

标签: loopback

我遇到一个奇怪的问题,它说column "scopes" does not exist。这是我在服务器中遇到的日志,但在本地环境中没有:

Unhandled error for request GET /api/continents?access_token=aaaaaaaaaaabbbbbbbbbbbbbbbbL1AwzSoH8eHXwPdjzQATRXqto3lngEokVxR2j: error: column "scopes" does not exist
2017-05-05T04:35:06.642201+00:00 app[web.1]:     at Connection.parseE (/app/node_modules/pg/lib/connection.js:569:11)
2017-05-05T04:35:06.642202+00:00 app[web.1]:     at Connection.parseMessage (/app/node_modules/pg/lib/connection.js:396:17)
2017-05-05T04:35:06.642203+00:00 app[web.1]:     at TLSSocket.<anonymous> (/app/node_modules/pg/lib/connection.js:132:22)
2017-05-05T04:35:06.642204+00:00 app[web.1]:     at emitOne (events.js:96:13)
2017-05-05T04:35:06.642209+00:00 app[web.1]:     at TLSSocket.emit (events.js:188:7)
2017-05-05T04:35:06.642210+00:00 app[web.1]:     at readableAddChunk (_stream_readable.js:176:18)
2017-05-05T04:35:06.642210+00:00 app[web.1]:     at TLSSocket.Readable.push (_stream_readable.js:134:10)
2017-05-05T04:35:06.642211+00:00 app[web.1]:     at TLSWrap.onread (net.js:547:20)

涉及访问令牌的所有API都出于同样的原因失败。如果未设置访问令牌,则API按预期工作(如果是公共的,我获取数据;如果需要身份验证,则获得401/403)。

我试过本地 - 它有效,我试过heroku local - 它也有效。经过长时间的测试,我发现差异(和已验证)是我的本地和heroku local正在运行环回版本3.4.0,而我的服务器运行3.8.0。

我强制服务器使用3.4.0后,这是正常的。

深入研究/node_modules/loopback/common/models/access-token.json,以下是3.4.0和3.8.0之间的差异:

Loopback 3.4.0:

"name": "AccessToken",
"properties": {
  "id": { "type": "string", "id": true },
  "ttl": { "type": "number", "ttl": true, "default": 1209600, "description": "time to live in seconds (2 weeks by default)" },
  "created": { "type": "Date", "defaultFn": "now" }
},

Loopback 3.8.0:

"name": "AccessToken",
"properties": {
  "id": { "type": "string", "id": true },
  "ttl": { "type": "number", "ttl": true, "default": 1209600, "description": "time to live in seconds (2 weeks by default)" },
  "scopes": {
    "type": ["string"],
    "description": "Array of scopes granted to this access token."
  },
  "created": { "type": "Date", "defaultFn": "now" }
},

由于我没有签入node_modules,有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我刚从升级到Loopback v3.8遇到了同样的问题。

您可以通过使用脚本自动更新AccessToken表来解决此问题。这是autoupdate脚本的基本版本。

&#13;
&#13;
var path = require('path');

var app     = require(path.resolve(__dirname, '../server/server'));
var ds      = app.datasources.db;

function update() {
  // migrate AccessToken
  ds.autoupdate('AccessToken', function (err) {
    console.log("ds.autoupdate('AccessToken', err=", err)
    if (err) throw err;

    ds.disconnect();

  }); // autoupdate('AccessToken')
}

// console.log("ds=", ds)
console.log("ds.connected=", ds.connected)
if(ds.connected) {
// Run autoupdate
  update();
} else {
  ds.once('connected', function() {
    // Run autoupdate
    update();
  });
}
&#13;
&#13;
&#13;

您可以通过将其命名为autoupdate.js,将其放在服务器目录的根目录中,然后在控制台中运行node autoupdate.js

来运行此操作

然后你会变得金黄。

答案 1 :(得分:1)

我遇到了从lb2.x转到lb3.17.0的同样的麻烦

刚做了一张转换表: ALTER TABLE accesstoken ADD范围TEXT;