在Loopback文档初始化应用程序时,有两件事:
第一:
Loopback.boot()根据json定义文件或给定选项加载数据源和模型,然后从models /和boot /目录加载所有js文件
然后 :
"不要在多个文件中使用app.boot()和app.model(name,config)进行组合,因为它可能导致模型由于竞争条件而未定义.为避免这种情况,请使用app.boot()确保所有模型作为模型定义的一部分传递."
这两者似乎不矛盾吗?
我有许多模型要定义,我不想在一个巨大的json文件中定义,因此想要在js每个模型中放置一个文件,models/在启动时加载所述目录.
我目前所做的是定义一个模型,models/ExampleModel.js如下所示:
var properties = {
fieldOne: { type: String, required: true },
otherField: { type: Number }
};
var options = {
relations: {
collections: {
type: "belongsTo",
model: "user"
}
}
};
var Model = require('loopback').Model;
module.exports = Model.extend('ExampleModel', properties, options);
Run Code Online (Sandbox Code Playgroud)
问题是:在期间boot(),模型已加载,但未附加到应用程序或任何数据源.它没有暴露给REST API.
我尝试了一个小的补充,models.json以在应用程序中启用该模型:
"examplemodel": {
"options": …Run Code Online (Sandbox Code Playgroud) 我一直在使用自定义init.d/app.conf脚本部署环回应用程序slc run --detach --cluster "cpu",但是我想按照建议使用strong-pm.
但我遇到了一些限制,我正在寻找有关如何复制我目前熟悉的设置的任何指导.
目前,我设置的特定应用程序的配置中server/config.local.js和server/datasources.local.js,最重要的是PORT在该应用程序应该监听上的连接.这适用slc run于本地开发和远程部署进行暂存,我所做的就是为每个不同的应用程序设置不同的env变量:
datasources.local.js:
module.exports = {
"mysqlDS": {
name: "mysqlDS",
connector: "mysql",
host: process.env.PROTEUS_MYSQL_HOST,
port: process.env.PROTEUS_MYSQL_PORT,
database: process.env.PROTEUS_MYSQL_DB,
username: process.env.PROTEUS_MYSQL_USER,
password: process.env.PROTEUS_MYSQL_PW
}
}
Run Code Online (Sandbox Code Playgroud)
config.local.js:
module.exports = {
port: process.env.PROTEUS_API_PORT
}
Run Code Online (Sandbox Code Playgroud)
当我使用strong-pm进行部署时,我无法控制此端口,并且它总是设置为3000 + N,其中N仅根据部署时分配给应用程序的服务ID递增.
所以即使我部署然后设置env使用
slc ctl -C http://localhost:8701 env-set proteus-demo PROTEUS_API_PORT=3033 PROTEUS_DB=demo APP_DOMAIN=demo.domain.com
Run Code Online (Sandbox Code Playgroud)
我看到强-pm在使用新的env vars重新部署时完全忽略了PROTEUS_API_PORT:
ENV has changed, restarting
Service "1" listening on 0.0.0.0:3001
Restarting next commit Runner: commit 1/deploy/default/demo-deploy
Start Runner: commit 1/deploy/default/demo-deploy
Request …Run Code Online (Sandbox Code Playgroud) 这些HasManyThrough与HasAndBelongsToMany之间的区别是什么?
https://docs.strongloop.com/display/public/LB/HasManyThrough+relations
VS
https://docs.strongloop.com/display/public/LB/HasAndBelongsToMany+relations
我很好奇,LB会自动创建createdAt和创建modified新模型的字段,就像RoR一样吗?LB文档说它应该,但是当我尝试创建一个新模型时,LB不会创建这些字段.这是我在MongoDB集合中创建新模型和新文档的脚本:
'use strict';
var server = require('./server');
var ds = server.dataSources.mongodb;
var collections = ['user'];
ds.automigrate(collections, function(er) {
if (er) throw er;
console.log('== Looback tables [' + collections + '] created in ', ds.adapter
.name);
server.models.user.create([{
username: 'admin',
password: "admin",
email: 'admin@gmail.com',
}], function(err, newUser) {
if(err) {
console.error("== Create ERROR ==:\n\r", err);
ds.disconnect();
process.exit(1);
}
console.log('== newUser ==:\n\r', newUser);
ds.disconnect();
process.exit();
});
});
Run Code Online (Sandbox Code Playgroud)
这是创建的文档.不createdAt和modified字段:
[ { username: 'admin',
password: …Run Code Online (Sandbox Code Playgroud) 任何人都知道Loopback文档中的"params"是什么:
https://docs.strongloop.com/display/public/LB/Executing+native+SQL
它说:
执行本机SQL
要直接对数据连接模型执行SQL,请使用以下命令:
dataSource.connector.execute(sql, params, cb);
Run Code Online (Sandbox Code Playgroud)
要么
dataSource.connector.query(sql, params, cb); // For 1.x connectors
Run Code Online (Sandbox Code Playgroud)
其中:sql - SQL字符串.params - SQL语句的参数.cb - 回调函数
我目前正在使用AngularJS,Loopback和MySQL构建一个webapp.它被罚了一段时间,最近我从前端回送的大部分请求开始因内部服务器错误而失败.
Error: ER_BAD_FIELD_ERROR: Unknown column 'scopes' in 'field list'
Run Code Online (Sandbox Code Playgroud)
我正在使用Loopback Angular SDK在我的前端发出请求.我真的不明白它为什么要搜索列范围,因为当我拥有它的id时我称之为搜索用户.
$scope.user = !$scope.isLoggedIn ? {} : Appuser.findOne({
filter: {
where: { id: Appuser.getCurrentId() }
}
}).$promise.then(function(res){
$scope.user = res;
});
Run Code Online (Sandbox Code Playgroud)
我最近开始在这个应用程序上使用webpack,并且最近重新安装了我的所有节点模块,我不知道它是否可能产生了影响,但我怀疑是因为当我恢复提交时,它都被罚款问题仍然存在.但是因为我正在使用npm和package.json来处理我的模块,所以我不明白会出现什么问题.
如何在环回中创建动态模型,而不是对所有模型使用命令“lb 模型”。
例如:如果我想创建 30 个具有几乎相同属性的模型,将无法一次又一次地创建所有 30 个模型和那些相应的属性。
是否可以创建模型并使用回送将其迭代到另一个模型。请分享您的答案。
https://loopback.io/doc/en/lb4/HasMany-relation.html
我按照此步骤操作,然后尝试获取数据,include但得到 500。
500 Error: Invalid "filter.include" entries: {"relation":"ranks"}
Run Code Online (Sandbox Code Playgroud)
我想要的是获得具有相关等级的游戏对象。
排名模型
import { Entity, model, property, belongsTo } from '@loopback/repository';
import { Game, GameWithRelations } from './game.model';
@model({ settings: { strict: 'filter' } })
export class Rank extends Entity {
@property({
type: 'string',
id: true,
})
id?: string;
@property({
type: 'string',
})
name?: string;
@property({
type: 'string',
})
shortName?: string;
@property({
type: 'string',
})
avatar?: string;
@belongsTo(() => Game)
gameId: string;
constructor(data?: Partial<Rank>) {
super(data);
}
}
export …Run Code Online (Sandbox Code Playgroud) 使用 lb4 生成器创建模型、存储库和控制器。
向模型添加新字段时,我的 POST 将开始失败并出现以下错误: 500 Error: schema is invalid: data.$ref should match format "uri-reference"
该错误太模糊了,我对它所要求的内容的参考为零。
比较以下情况时验证失败:
$schema = http://json-schema.org/draft-07/schema
$ref = #/components/schemas/新用户
编辑:显然,如果您向控制器添加标题选项,它不知道如何处理自己
我想用一个查询针对 10 个查询插入 10 个条目。
我需要设置一些东西吗?我根本不知道该怎么办。
带有示例的仓库:https://github.com/mathias22osterhagen22/loopback-array-post-sample
编辑:people-model.ts:
import {Entity, model, property} from '@loopback/repository';
@model()
export class People extends Entity {
@property({
type: 'number',
id: true,
generated: true,
})
id?: number;
@property({
type: 'string',
required: true,
})
name: string;
constructor(data?: Partial<People>) {
super(data);
}
}
export interface PeopleRelations {
// describe navigational properties here
}
export type PeopleWithRelations = People & PeopleRelations;
Run Code Online (Sandbox Code Playgroud) loopbackjs ×10
strongloop ×4
loopback4 ×3
node.js ×3
javascript ×2
angularjs ×1
deployment ×1
model ×1
mongodb ×1
mysql ×1
npm ×1
post ×1
postgresql ×1
webpack ×1