我正在为学校平台开发 API。\n我想在开发过程中在启动脚本中迁移数据库并为其设定种子。
\n\n我可以创建学校实例、组实例和个人实例,但我不知道如何在个人实例和组实例之间添加关系(多对多)
\n\n这是我的 Person .json 文件:
\n\n{\n "name": "Person",\n "base": "User",\n "strict": true,\n "idInjection": true,\n "properties": {\n "name": {\n "type": "string",\n "required": true\n },\n "firstName": {\n "type": "string",\n "required": true\n }\n },\n "validations": [],\n "relations": {\n "groups": {\n "type": "hasAndBelongsToMany",\n "model": "Group"\n },\n "school": {\n "type": "belongsTo",\n "model": "School"\n }\n },\n "acls": [],\n "methods": []\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的 group.json 文件
\n\n{\n "name": "Group",\n "base": "PersistedModel",\n "strict": true,\n "idInjection": true,\n "properties": {\n "name": {\n "type": "string",\n "required": …Run Code Online (Sandbox Code Playgroud) 使用环回,我使用 REST 连接器创建了到现有 API 的连接,该连接运行良好。但是,我想传递来自客户端的 oAuth 令牌。
我可以通过ctx.req.headers.authorization从Model.beforeRemote方法中抓取来获取 oAuth 令牌,但似乎无法找到将它作为新标头传递给 REST 连接器的方法。
我尝试了几件事:
Model.observe(但这似乎不会用 REST 连接器触发)。任何想法表示赞赏。
我正在开发 REST api,并考虑通过使用 Loopback 框架来减少开发时间。
我喜欢这个框架的很多东西(而且它似乎符合我的需求),但我完全不喜欢这个:
http://localhost:3000/api/users?filter[where][username]=john&filter[where][email]=callback@strongloop.com
http://localhost:3000/api/users?filter={"where":{"username":"john","email":"callback@strongloop.com"}}
Run Code Online (Sandbox Code Playgroud)
如果您有一个作为 REST api 公开的模型,那么您的 url 就是这样的。对我来说,这两种选择看起来都很奇怪而且有点丑陋。当你看到这样的例子时,事情看起来就更奇怪了/cars?filter[where][miles][gt]=5000。
那么,我可以以某种方式更改所有公开模型的 url 形式吗?(更传统的东西)。我真的很想要普通的查询字符串,例如:
http://localhost:3000/api/users?username=john&email=callback@strongloop.com
Run Code Online (Sandbox Code Playgroud)
他们看起来像这样,有什么原因让我应该欣赏而不是外表吗?有没有使用这种语法的 REST api?
谢谢
使用 Loopback 框架,我想在Item编辑之前执行一些操作,因此我正在尝试此操作但无法将其绑定到更新挂钩。
Item.beforeRemote("update", function(ctx,myitem,next) {
console.log("inside update");
});
Run Code Online (Sandbox Code Playgroud)
相反,更新我与尝试updateAttributes,updateById,创建但没有工作。这种 beforeRemote 钩子适用于 create on POST,但在编辑期间无法通过PUT获取它。留给我的最后一个解决方案是再次检查带有通配符钩子的 methodString,但我想知道是否有任何我找不到的文档记录。
Item.beforeRemote("**",function(ctx,instance,next){
console.log("inside update");
});
Run Code Online (Sandbox Code Playgroud) 我创建了一个 mixin,我试图在其中覆盖所有模型的 getDataSource 方法,例如:
Model.getDataSource = function() {
console.log('Overriding the getDataSource for model ' + Model.modelName);
// Code to attach the new datasource based on some logic by
// invoking Model.attachTo(datasourcename) method
}
Run Code Online (Sandbox Code Playgroud)
我创建了最初将数据源设置为“db”的模型。当我向应用程序发出请求时,它应该将数据源动态附加到模型。我不确定我在上面做错了什么,因为从来没有为我最初创建的模型调用上述方法,但它会为所有动态创建的模型调用(使用 createModel 方法)。
我开发了一个Loopback API,并希望将其部署到测试实例(可能是Heroku或Digital Ocean).
理解如何部署它非常复杂.似乎有很多解决方案,从StrongLoop Process Manager到普通的Node.js服务器......信息不是非常消化所以任何人都可以帮助我理解我有什么可能部署它以及什么是赞成/缺点每一个.
我正在阅读一些文档,但感觉有点迷失.来自已经部署它的人的一些意见将是伟大的,我不能是唯一一个感到困惑的人.
我知道我们可以在将公开端点的模型上创建远程方法。但是,有没有办法在没有模型的情况下公开端点?
例如,如果我想创建一个端点检查本机应用程序的版本。我不需要模型来支持这个端点。端点将简单地检查传入的版本并做出响应。
这个结构是否存在于 Loopback 中?还是需要在 Express 的上下文中完成?
Strongloop Loopback是否支持更改流中的过滤?
以下内容适用于所有模型更改,但是我仅对模型部分的更改感兴趣。我可以将过滤添加到EventSource-URL吗?
var src = new EventSource('/api/mymodel/change-stream?_format=event-source');
var changes = createChangeStream(src);
changes.on('data', function(update) {
console.log("data changed...", JSON.stringify(update));
});
Run Code Online (Sandbox Code Playgroud)
谢谢
我对 Loopback 和 Typescript 有点陌生,所以我不知道如何实现它。我试图直接调用 Nodemailer,但到目前为止我一直收到错误。
我的邮寄服务:
import { SentMessageInfo } from 'nodemailer';
import Mail = require('nodemailer/lib/mailer');
const nodemailer = require("nodemailer");
export class MailerService {
async sendMail(mailOptions: Mail.Options): Promise<SentMessageInfo> {
const transporter = nodemailer.createTransport({
host: 'smtp.ethereal.email',
port: 587,
auth: {
user: 'albert.grimes@ethereal.email',
pass: 'qN85JT6SneBA9S5dhy'
}
});
return await transporter.sendMail(mailOptions);
}
}
Run Code Online (Sandbox Code Playgroud)
我的邮件控制器:
import { Request, RestBindings, get, ResponseObject } from
'@loopback/rest';
import { inject } from '@loopback/context';
import { MailerService } from "../services";
export class MailController {
constructor(
@inject ??? …Run Code Online (Sandbox Code Playgroud) 我已经在环回中继承了这样的模型-
{
"name": "MyModel",
"base": "AnotherModel",
"idInjection": false,
"properties": {
"value": {
"type": "String"
},
"display": {
"type": "String"
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": []
}
Run Code Online (Sandbox Code Playgroud)
虽然我可以AnotherModel从MyModel.js文件中调用所有的远程方法。但是,AnotherModel我的浏览器中没有显示的远程方法。如何使继承的模型的所有远程方法显示在资源管理器中?
strongloop ×10
loopbackjs ×8
loopback ×2
node.js ×2
datasource ×1
eventsource ×1
heroku ×1
javascript ×1
loopback4 ×1
oauth ×1
rest ×1
typescript ×1
url ×1