我正在尝试设置一个示例强循环应用程序,当我尝试使用/ explorer尝试使用post api时,我收到以下错误。
"Cannot call AccessToken.findById(). The findById method has not been setup.. The PersistedModel has not been correctly attached to a DataSource."
我跑过并安装了slc loopback:acl,其中包含以下设置:
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "admin",
"permission": "ALLOW"
}
],
但是,这些设置似乎不适用于我的模型。
我遇到了同样的问题:为我解决这个问题的方法是删除浏览器的本地存储(在开发工具的“资源”选项卡中)。对此的解释是我一直在使用另一个使用基于令牌的身份验证的环回应用程序。
我有相同的错误消息,解决方案不可用,因为每个人都有自己的想法。
什么对我有用如果根据loopback-component-passport中给出的引用扩展了AccessToken,
只是不要从model-config中删除基本的AccessToken。不要担心环回只会使用扩展模型来保留令牌。
模型config.json
`'....
,
"AccessToken": {
"dataSource": "adnexux",
"public": false
},
"accessToken": {
"dataSource": "adnexux",
"public": false
},
...'`
然后将其添加到middleware.json
`....
,
"loopback#token": {
"params": {
"model": "accessToken"
}
}
},
...`
如果错误没有扩展accessToken:
然后,如果模型连接到数据源,请检查模型配置。
`....
"AccessToken": {
"dataSource": "adnexux",
"public": false
},
.....`
要获得当前用户,您可以将此代码粘贴到server.js中
`'app.use(function setCurrentUser(req, res, next) {
if (!req.accessToken) {
return next();
}
app.models.user.findById(req.accessToken.userId, function(err, user) {
if (err) {
return next(err);
}
if (!user) {
return next(new Error('No user with this access token was found.'));
}
res.locals.currentUser = user;
next();
});
});'`
我有相同的错误消息,我的解决方案是编辑model-config.json,其值为我的实体上的“datasourse”:
"cat": {
"dataSource": "mydb",
"public": true
}
整个文件是:
模型config.json
{
"_meta": {
"sources": [
"loopback/common/models",
"loopback/server/models",
"../common/models",
"./models"
],
"mixins": [
"loopback/common/mixins",
"loopback/server/mixins",
"../common/mixins",
"./mixins"
]
},
"cat": {
"dataSource": "mydb",
"public": true
}
}
datasource.json
{
"mydb": {
"host": "localhost",
"port": 27017,
"url": "",
"database": "test",
"password": "",
"name": "",
"user": "",
"connector": "mongodb"
}
}
我正在研究loopback 3.x的示例,我必须安装以下节点包才能启用与mongodb的连接
npm install loopback-connector-mongodb --save
如果您需要更多信息,可以参考https://loopback.io/doc/en/lb3/MongoDB-connector.html的官方文档