我正在使用loopback 2.0.
我使用yeoman生成器生成了我的模型,并为每个模型添加了一个js文件以扩展其行为.
如何在ModelB中调用ModelA中的方法?
例
文件夹结构:
/common
/models
Car.json
Car.js
Engine.json
Engine.js
...
Run Code Online (Sandbox Code Playgroud)
Car.js:
module.exports = function(Car) {
Car.drive = function(destination, fn) { ... }
...
};
Run Code Online (Sandbox Code Playgroud)
的engine.js:
module.exports = function(Engine) {
Engine.doSomething = function(something, fn) {
// *** Here is where I want to invoke a method from the Car.js
var loopback = require('loopback');
var Car = loopback.models.Car;
Car.drive('49.1234,12.1234', fn);
// ***
}
...
};
Run Code Online (Sandbox Code Playgroud) 我正在使用WebStorm v 9.0.3.我想创建一个Strongloop/Loopback应用程序+ NodeJS应用程序.有没有办法直接通过WebStorm IDE创建它,或者我们应该使用命令行手动创建它.
目前,在WebStorm项目创建期间,我只能看到NodeJS Express App配置.
我正在使用Ubuntu 14.04 LTS系统.
请帮我做.
我正在尝试环回,并注意到在model-config文件中它引用了5个模型,它们dataSource设置为内存数据库db:
"User": {
"dataSource": "db"
},
"AccessToken": {
"dataSource": "db",
"public": false
},
"ACL": {
"dataSource": "db",
"public": false
},
"RoleMapping": {
"dataSource": "db",
"public": false
},
"Role": {
"dataSource": "db",
"public": false
}
Run Code Online (Sandbox Code Playgroud)
是否需要将用户,acl等保留在内存中?如果没有,我该如何将这些模型移植到mysql?我尝试切换dataSource到我的mysql源,但服务器抱怨,因为表不存在.
根据文档,StrongLoop不支持运行自定义sql语句。 https://docs.strongloop.com/display/public/LB/Executing+native+SQL
任何人都认为您可以通过简单的连接就可以构建企业应用程序,这超出了我,但是我确实找到了这篇文章,说明您可以做到: 在MySQL Loopback Connector上执行原始查询
但这是针对MySql的。当我用Postgres尝试它时,出现错误:“类型'object'的参数'byId'的值无效:0。收到的类型已转换为数字。” 而且它不返回任何数据。这是我的代码:
module.exports = function(account) {
account.byId = function(byId, cb){
var ds=account.dataSource;
var sql = "SELECT * FROM account where id > ?";
ds.connector.execute(sql, [Number(byId)], function(err, accounts) {
if (err) console.error(err);
console.info(accounts);
cb(err, accounts);
});
};
account.remoteMethod(
'byId',
{
http: {verb: 'get'},
description: "Get accounts greater than id",
accepts: {arg: 'byId', type: 'integer'},
returns: {arg: 'data', type: ['account'], root: true}
}
);
};
Run Code Online (Sandbox Code Playgroud)
对于[Number(byId)]部分,我也尝试过[byId]和仅byId。没用。
有任何想法吗?到目前为止,我真的很喜欢StrongLoop,但是看来Postgresql连接器尚未准备好投入生产。如果不行,我将在下一个Sails中制作原型。:-(
我深化发展延伸碱基的环回应用User模型来UserCode进行建模,其中每个用户被识别出的email 加一个code字段.
这样用户可以使用相同的电子邮件注册两次但使用不同的代码.
我node_modules/loopback/common/models/user.js在第691行看到过:
UserModel.validatesUniquenessOf('email', {message: 'Email already exists'});
Run Code Online (Sandbox Code Playgroud)
我想删除此限制/验证,但当然没有更改环回代码.
我该怎么做?也许在启动脚本中我可以遍历所有验证并删除这个?
我克隆了一个https://github.com/beeman/loopback-angular-admin
,我使用环回资源管理器创建了几个新角色,但是如何为我创建的用户分配角色
我有一个用户模型,它在环回中从User模型扩展而且模型文件是这样的 -
{
"name": "user",
"plural": "users",
"base": "User",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {},
"validations": [],
"relations": {
"accessTokens": {
"type": "hasMany",
"model": "accessToken",
"foreignKey": "userId"
},
"identities": {
"type": "hasMany",
"model": "userIdentity",
"foreignKey": "userId"
},
"credentials": {
"type": "hasMany",
"model": "userCredential",
"foreignKey": "userId"
},
"roles": {
"type": "hasMany",
"model": "Role",
"foreignKey": "principalId",
"through": "RoleMapping"
}
},
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "admin",
"permission": "ALLOW"
},
{
"accessType": "READ",
"principalType": …Run Code Online (Sandbox Code Playgroud) 我有以下代码test1.js.
module.exports = function(d){
d.demo1 = function() {
return "DEMO 1";
},
d.demo2 = function() {
return "DEMO 2";
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试访问函数demo1 test2.js.在调用函数的代码下面.
var demo = require('./test1');
var result = demo.****; //code to call function demo1
console.log("calling function", result); //output should be "calling function DEMO 1"
Run Code Online (Sandbox Code Playgroud)
请帮助我如何访问此功能.谢谢.
我在Loopback3文档中读到了不推荐使用getCurrentContext()的内容.我想要做的是获取访问令牌并使用它来查找数据库中的关联用户,这样我就可以获得用户所属的company_id并更改查询以将其包含在where子句中.我正在使用MySQL和从User扩展的自定义UserAccount模型.
我是Loopback的新手,所以很难解决这个问题,因为大多数在线帮助似乎都指向getCurrentContext();.
我已经设置了一些中间件来运行解析阶段:
middleware.json
"parse": {
"./modifyrequest": {
"enabled": true
}
}
Run Code Online (Sandbox Code Playgroud)
modifyrequest.js
var loopback = require('loopback');
module.exports = function(app) {
return function tracker(req, res, next) {
console.log('Middleware triggered on %s', req.url);
console.log('-------------------------------------------------------------------');
console.log(req.accessToken);
}
};
Run Code Online (Sandbox Code Playgroud)
但是req.accessToken总是未定义的.我已经添加到server.js:
app.use(loopback.token());
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?这是错误的方法吗?
解
根据Kamal在下面的评论......
尝试在"initial:before"下的middleware.json中设置"loopback#token":{}
这会填充req.accessToken
我是新手环回我想将我的loopback远程方法API的每个响应更改为特定格式
例如:如果成功
{
status:1,
data:{},
message:"Success"
}
Run Code Online (Sandbox Code Playgroud)
如果错误
{
status:0,
data:{},
message:"Something went wrong"
}
Run Code Online (Sandbox Code Playgroud) 我要弄清楚的是如何获取当前经过身份验证的用户的ID,以及如何在数据库中将记录创建为其他模型的外键时使用该ID?
更具体地说,我需要获取当前经过身份验证的用户(模型:CommonUser)的ID,并在创建新事件时将该ID用作FK。
关系:
我已经基于称为CommonUser的用户模型创建了一个模型。普通用户有很多事件。事件属于普通用户。
因此,Event具有一个名为commonUserId的外键。
如何获取用户ID并在插入时使用该ID?
我本以为就建立关系而言,这将是过程的一部分自动进行吗?那不对吗?
同样使事情复杂化的是,我有一个事件查找表(我会担心下一个表,因此不必深究),因为事件通过事件查找还具有AndBelongsToMany。
用户
{
"name": "CommonUser",
"base": "User",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {},
"validations": [],
"relations": {
"events": {
"type": "hasMany",
"model": "Event",
"foreignKey": "eventId",
"through": "EventLookUp"
},
"friends": {
"type": "hasMany",
"model": "CommonUser",
"through": "Friend",
"foreignKey": "friendId"
}
},
"acls": [],
"methods": {}
}
Run Code Online (Sandbox Code Playgroud)
事件
{
"name": "Event",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"name": {
"type": "string"
},
"radius": {
"type": "number",
"default": …Run Code Online (Sandbox Code Playgroud) loopbackjs ×10
node.js ×5
express ×4
strongloop ×4
javascript ×2
angularjs ×1
api ×1
postgresql ×1
rest ×1
roles ×1
validation ×1
webstorm ×1