我想知道如何验证应用程序以向端点发出请求,因为我收到401错误,我已成功生成应用程序ID和appkeys,应该使用它,因为没有文档.
我想在我的loopback应用程序中实现多租户.现在,我正在尝试使用中间件重新定义我的数据源,以便根据请求的域为每个请求指向我的mongodb服务器上的不同数据库.代码运行,但它似乎并没有实际更改数据源.相反,它总是使用我的datasources.json中定义的那个.
现在,这就是我在做的事情.我的所有模型都引用了"my_db",我希望每个租户在我的mongo服务器上都有一个数据库.
var dataSourceObj = {
my_db:{
url: process.env.MONGOLAB_URI,
connector: "mongodb",
name: "my_db",
database: tenant
}
}
Object.keys(dataSourceObj).forEach(function(dataSource) {
app.dataSources[dataSource].adapter.settings = dataSourceObj[dataSource];
app.dataSources[dataSource].adapter.clientConfig = dataSourceObj[dataSource];
app.dataSources[dataSource].settings = dataSourceObj[dataSource];
app.dataSources[dataSource].connector.settings = dataSourceObj[dataSource];
app.dataSources[dataSource].connector.clientConfig = dataSourceObj[dataSource];
});
Run Code Online (Sandbox Code Playgroud)
有没有人有任何想法?这是一种多租户的愚蠢方式吗?
谢谢!
Ember Data的REST适配器以这种格式接受来自服务器的JSON:
摘自文档:http://guides.emberjs.com/v1.10.0/models/the-rest-adapter/
{
"post": {
"id": 1,
"title": "Node is not omakase",
"comments": [1, 2, 3]
},
"comments": [{
"id": 1,
"body": "But is it _lightweight_ omakase?"
},
{
"id": 2,
"body": "I for one welcome our new omakase overlords"
},
{
"id": 3,
"body": "Put me on the fast track to a delicious dinner"
}]
}
Run Code Online (Sandbox Code Playgroud)
是否有可能从strongloop返回这种JSON格式?
乍一看,他们似乎做同样的事情:定义一对多的关系所以为什么你会选择一个或另一个?
我们的MySQL数据库是用Write集群和Read集群设置的,有没有办法设置Strongloop Loopback Model(例如User)写入MySQL Host A并从MySQL Host B读取?
我似乎陷入了经典的ORM问题,并且不知道如何处理它,所以在这一点上欢迎任何帮助.
有没有办法在hasManyThrough查询上获取数据透视表?更好的是,应用一些过滤器或排序.一个典型的例子
表产品
id,title
Run Code Online (Sandbox Code Playgroud)
表类别
id,title
Run Code Online (Sandbox Code Playgroud)
table products_categories
productsId, categoriesId, orderBy, main
Run Code Online (Sandbox Code Playgroud)
因此,在上面的场景中,假设您希望获得(main = true)的所有类别的产品X,或者您希望按类别对产品类别进行排序orderBy.
现在会发生什么是第一SELECT的产品,以获得产品数据,第二SELECT对products_categories获得categoriesId和最终SELECT的类别,以获得实际的类别.理想情况下,过滤器和排序应该适用于第二SELECT类
SELECT `id`,`productsId`,`categoriesId`,`orderBy`,`main` FROM `products_categories` WHERE `productsId` IN (180) WHERE main = 1 ORDER BY `orderBy` DESC
Run Code Online (Sandbox Code Playgroud)
另一个典型的例子是希望根据用户想要的订单来订购产品图像
所以你会有一个products_images表
id,image,productsID,orderBy
Run Code Online (Sandbox Code Playgroud)
你会想要的
SELECT from products_images WHERE productsId In (180) ORDER BY orderBy ASC
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?
编辑:这是中间表根据我的架构获得我需要的内容所需的关系.
Products.hasMany(Images,
{
as: "Images",
"foreignKey": "productsId",
"through": ProductsImagesItems,
scope: function (inst, filter) {
return {active: 1};
}
});
Run Code Online (Sandbox Code Playgroud)
事情是范围功能让我访问最终结果而不是中间表.
我是新手LoopBack,我似乎错过了一些东西.我听说了很多关于StrongLoop和LoopBack,我觉得很难相信这不存在.
我的情况:我正在计算每种不同严重程度的事件数量.
一张表例如:
EventID | 严重
1 | 2
2 | 2
3 | 4
4 | 3
5 | 3
6 | 五
7 | 1
8 | 2
现在我想计算事件的数量并按严重程度对它们进行分组,所以我得到了类似这样的JSON:
{1:1, 2:3, 3:2, 4:1, 5:1} *(severity:count)*
Run Code Online (Sandbox Code Playgroud)
使用SQL它很简单,只需使用"SELECT severity, count(severity) FROM events GROUP BY severity".
我已经研究了一段时间了,仍然无法相信这个简单的事情无法完成LoopBack!
有解决方案吗 或者也许是一篇指向我的文章?
提前致谢!
我有一个空的环回应用程序,我添加了一个模型和一个mongodb数据源.
连接时,我收到以下错误:
Web server listening at: http://0.0.0.0:3000
Browse your REST API at http://0.0.0.0:3000/explorer
Connection fails: { [MongoError: Authentication failed.]
name: 'MongoError',
message: 'Authentication failed.',
ok: 0,
code: 18,
errmsg: 'Authentication failed.' }
It will be retried for the next request.
/media/[...]/node_modules/mongodb/lib/mongo_client.js:454
throw err
^
MongoError: Authentication failed.
at Function.MongoError.create (/media/[...]/node_modules/mongodb-core/lib/error.js:31:11)
at /media/[...]/node_modules/mongodb-core/lib/topologies/server.js:778:66
at Callbacks.emit (/media/[...]/node_modules/mongodb-core/lib/topologies/server.js:95:3)
at null.messageHandler (/media/[...]/node_modules/mongodb-core/lib/topologies/server.js:249:23)
at Socket.<anonymous> (/media/[...]/node_modules/mongodb-core/lib/connection/connection.js:265:22)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
at readableAddChunk (_stream_readable.js:153:18)
at Socket.Readable.push (_stream_readable.js:111:10)
at TCP.onread (net.js:531:20)
Run Code Online (Sandbox Code Playgroud)
db在docker中运行.我可以通过"MongoClient"连接到它
datasources.js:
{
"mongodb_dev": …Run Code Online (Sandbox Code Playgroud) 嗨,作为问题的标题,我想知道如何在启动测试之前检查环回启动脚本是否已完成.在示例项目中:
https://github.com/strongloop/loopback-example-relations
测试文件夹中有一个文件似乎可以完成这项工作,但遗憾的是它没有解决它.
start-server.js:
var app = require('../server/server');
module.exports = function(done) {
if (app.loaded) {
app.once('started', done);
app.start();
} else {
app.once('loaded', function() {
app.once('started', done);
app.start();
});
}
};
Run Code Online (Sandbox Code Playgroud)
此脚本在其余测试API中加载,如下所示:
before(function(done) {
require('./start-server');
done();
});
Run Code Online (Sandbox Code Playgroud)
但是从不调用该函数.这是使用该脚本的正确方法吗?
我结束了以下实现:
before(function (done) {
if (app.booting) {
console.log('Waiting for app boot...');
app.on('booted', done);
} else {
done();
}
});
Run Code Online (Sandbox Code Playgroud)
哪个有效,但我对这个启动服务器脚本感到困惑.
按照@stalin建议编辑我修改了before函数如下:
before(function(done) {
require('./start-server')(done);
});
Run Code Online (Sandbox Code Playgroud)
并且执行进入else分支但从done未被调用.
是否有一个表单使环回自动验证远程方法中的输入参数?
我们假设我们有一个远程方法的以下定义:
WebuserModel.remoteMethod('overLogin', {
description: "Performs a Webuser's login to the system",
accepts: [
{
arg: 'credentials', type: {
"username": { type: "string", required:true },
"password": { type: "string", required: true }
},
http: {source: 'body'},
required: true
},
],
returns: {arg: 'accesToken', type: "object", root: true},
http: {path: '/login', verb: 'post'}
}
Run Code Online (Sandbox Code Playgroud)
我希望loopback能够在每个请求上执行输入参数的验证,并在传递的对象不符合定义的模式(具有两个强制属性的强制对象)时引发错误.
显然它不会发生.任何线索?