我正在尝试在Loopback中为基于用户的模型创建自定义方法.
该方法调用login,然后检索用户的角色并将其添加到响应中,以便登录请求立即保存令牌和角色信息.
我的问题是,一旦我有令牌信息,我不知道如何从我正在创建的那个中调用Role&RoleMapping方法...
如何将这些模型添加到当前范围?
如何从此方法访问rootScope?
这就是我的成就:
module.exports = function(TiUser) {
TiUser.auth = function(credentials, include, fn) {
var self = this;
self.login(credentials, include, function(err, token) {
var role = // Here I would retrieve Role related info
authInfo = {
token: token,
role: role
};
fn(err, authInfo);
});
};
TiUser.remoteMethod(
'auth',
{
description: 'Login method with Role data information embedded in return',
accepts: [
{arg: 'credentials', type: 'object', required: true, http: {source: 'body'}},
{arg: 'include', type: ['string'], http: {source: 'query' }, …Run Code Online (Sandbox Code Playgroud) 是否有规定的方法在环回中创建自定义验证器?举个例子,假设我想创建类似的东西:
Validatable.validatesRange('aProperty', {min: 0, max: 1000})
Run Code Online (Sandbox Code Playgroud)
请注意我知道:
Validatable.validates(propertyName, validFn, options)
Run Code Online (Sandbox Code Playgroud)
我使用validates()的问题是validFn无权访问这些选项.所以,我被迫硬编码这个逻辑; 并为需要此类验证的每个属性创建自定义方法.这是不可取的.
同样,我熟悉:
Model.observes('before save', hookFn)
Run Code Online (Sandbox Code Playgroud)
不幸的是,我认为甚至无法为hookFn()声明选项.我没有这个特定的需求(至少,还没有).这只是我探索的一种途径,可以替代解决我的问题.
任何建议表示赞赏.提前致谢!
我想在“保存后”钩子中更新最后插入/更新的文档(行)而不创建这样的新实例:
Model.observe('after save', function (ctx, next) {
ctx.someProperty = 'Foo';
ctx.update();
});
Run Code Online (Sandbox Code Playgroud)
怎么可能?
在构建自定义端点时,我经常需要解析包含承诺的复杂对象。
为了说明,以这个例子为例:
给定已知用户的id、employeeId和memberGroupsIds(一个数组):
var loginResponse = {
userprofile : getProfile(id)
companyInfo : {
company : getCompany(employeeId)
companyRelations : getPriviligedInfo(employeeId)
}
groups : getGroups(memberGroupsIds)
}
Run Code Online (Sandbox Code Playgroud)
此逻辑适用于仅返回其值的同步函数。但是对于返回 promise 的函数,我必须手动将它们全部推送到一个数组中,以确保在使用最终对象之前解析它们。
我发现上面的代码很容易理解,我正在寻找一个签名来提供一些签名,同时仍然确保在将最终对象发送给客户端之前解决承诺。
问题不在于使它工作,而在于使它美观且易于阅读。
最好的答案是确保将值返回到对象中的预期键,并并行解析所有承诺,同时保持与同步函数的结构有些兼容的结构。
或者,如果我没有抓住重点并且认为这一切都是错误的,我应该如何看待它?
我对环回非常陌生,我想将环回的密码方法的默认散列覆盖为我后端当前使用的方法,以便我可以将此应用程序与该数据库同步。
我阅读了此链接https://groups.google.com/forum/#!topic/loopbackjs/ROv5nQAcNfM但我无法理解如何覆盖密码和验证?
所以我第一次使用 Loopback(Node.js 框架)并尝试建立一个 Mysql 模型。我已经全局安装了 Loopback,并且还安装了带有 npm 的 mysql 连接器。之后,我尝试使用 mysql 连接器添加数据源。我尝试使用我的 MAMP localhost 数据库。
不幸的是,当我再次输入node .命令尝试与环回连接时出现错误。错误:Error: connect ECONNREFUSED 127.0.0.1:3306。
所以我做了一些研究,很多人回答了不同的节点问题,说你必须将 MAMP 的套接字添加到你的配置中才能获得连接。所以我试图添加它,但这似乎不起作用,或者我做得不对,因为,我找不到正确的方法。这是我的数据源:
"db": {
"host": "127.0.0.1",
"port": "3306",
"url": "",
"database": "meetups",
"password": "root",
"name": "root",
"user": "root",
"connector": "mysql"
}
Run Code Online (Sandbox Code Playgroud)
我试图添加"socketPath": "/var/run/mysqld/mysqld.sock","socket": "/var/run/mysqld/mysqld.sock"但这似乎不起作用。有没有人有 exp. 在 node.js / 环回中?
我收到一个错误,说
(node:27301) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Callback was already called.
Run Code Online (Sandbox Code Playgroud)
根据我对在 await 和 Mozilla 描述中拒绝承诺的理解:
如果 Promise 被拒绝,则 await 表达式会抛出被拒绝的值。
我拒绝了我的 Promise 周围的回调中的错误,如下所示:
Airport.nearbyAirports = async (location, cb) => {
let airports
try {
airports = await new Promise((resolve, reject) => {
Airport.find({
// code
}, (err, results) => {
if (err)
reject(err) // Reject here
else
resolve(results)
})
})
} catch (err) { // Catch here
cb(err, null)
return
}
if (!airports.empty)
cb(null, airports)
} …Run Code Online (Sandbox Code Playgroud) 我有一个处理数千个数据的请求。所以有时需要超过 5 分钟才能完成。
但不幸的是,在进程完成之前,环回返回超时(服务器没有响应)。
在 nodejs 请求中。您可以通过以下代码删除特定请求的请求超时。
request.setTimeout(0)
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何为环回远程方法执行此操作?
我是 TypeScript 的新手。我目前正在学习使用 Typescript 语言的 NodeJS Loopback 4框架。我的问题是如何将在 JS 文件中导出的一些函数、类导入到我的 TS 文件中。经过多种方式搜索后,它仍然对我不起作用。下面是例子:
// /src/index.ts
import {plus} from './lib/test';
console.log(plus(1,2));
Run Code Online (Sandbox Code Playgroud)
// /src/lib/test.js
export function plus(x, y) {
return x + y;
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用这样的定义打字稿
// /src/lib/test.d.ts
export declare function plus(x: number, y: number): number;
Run Code Online (Sandbox Code Playgroud)
但是在 index.ts 文件中导入这个函数时仍然出错
错误:在 Function.Module._resolveFilename (module.js:543:15) 中找不到模块“./lib/test”
我想将我的节点更新到高于 v10 的版本,但我仍然得到 v9.11.2。我试过这个命令
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
Run Code Online (Sandbox Code Playgroud)
我仍然使用 v9.11.2 我也删除并重新安装但没有变化。使用n:n latest答案也是 v9.11.2,sudo apt-get install --only-upgrade nodejs
响应是:您的版本是最新的
我的环回项目确实需要 v10 及更高版本
loopbackjs ×10
node.js ×7
loopback ×3
strongloop ×3
async-await ×1
bluebird ×1
es6-promise ×1
express ×1
import ×1
javascript ×1
mamp ×1
promise ×1
typescript ×1