- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个方法 checkAddressEnterContestBefore
来检查一些要求。此功能需要连接到数据库(mysql),但我无法注入(inject)存储库。在这种情况下我能做什么?
import { Contest } from '../models';
import { CONTEST_STATUS } from './constants';
import { ContestEntryRepository } from '../repositories';
import { inject } from '@loopback/core';
export function checkEnterContest(contest: Contest, address: string): boolean {
....
if (!checkAddressEnterContestBefore(contest, address)) return false;
...
return true;
}
export async function checkAddressEnterContestBefore(
@inject(ContestEntryRepository) contestEntryRepository: ContestEntryRepository,
contest: Contest, address: string): Promise<boolean> {
const contestEntry = await contestEntryRepository.findOne({
where: {
and: [
{ contestId: contest.id },
{ address: address }
]
}
});
return contestEntry == null
}
最佳答案
依赖注入(inject)有两部分:
@inject
装饰器装饰以指定要注入(inject)的内容在您的代码片段中,您正在装饰 checkAddressEnterContestBefore
以通过 DI 接收一些参数(这是我上面列表中的第一项)。代码是否编译?据我所知,装饰器不能应用于常规函数,只能应用于类成员(静态或实例级)。
一个使用静态类方法的例子:
export class CheckAddressEnterContestBefore {
static async run(
@inject(ContestEntryRepository) contestEntryRepository: ContestEntryRepository,
contest: Contest, address: string): Promise<boolean> {
const contestEntry = await contestEntryRepository.findOne({
where: {
and: [
{ contestId: contest.id },
{ address: address }
]
}
});
return contestEntry == null
}
}
现在 checkEnterContest
没有实现依赖注入(inject)/解析(我上面列表中的第二项)。
LoopBack 提供了一个辅助函数 invokeMethod
,您可以使用它来调用具有依赖项注入(inject)的方法。您将需要当前的 Context
对象作为从中获取依赖项的来源。
import {invokeMethod} from '@loopback/core';
export function checkEnterContest(ctx: Context, contest: Contest, address: string): boolean {
....
const checkResult = await invokeMethod(
CheckAddressEnterContestBefore,
'run',
// context for resolving dependencies
ctx,
// additional (non-injected) arguments
[contest, address],
);
if (!checkResult) return false;
...
return true;
}
就我个人而言,我认为它是一种反模式,可以从代码库深处的上下文中解决依赖关系。相反,我建议使用常规函数/方法参数在代码库的不同部分之间传递依赖关系,并仅在顶层使用基于 @inject
的依赖注入(inject)——通常在 Controller 方法中。
这将使您的代码更易于单独测试,因为每个函数都明确了它需要哪些依赖项,如果您的测试未提供所有必需的依赖项,编译器会在编译时警告您。当您从上下文中解析依赖项时,您只会在运行时发现缺少的依赖项,因为您的测试没有在上下文中绑定(bind)它们而无法解析它们。
话虽如此,以下是我将如何重写您的代码:
export function checkEnterContest(
contestEntryRepository: ContestEntryRepository,
contest: Contest,
address: string
): boolean {
....
if (!checkAddressEnterContestBefore(contestEntryRepository, contest, address)) return false;
...
return true;
}
export async function checkAddressEnterContestBefore(
contestEntryRepository: ContestEntryRepository,
contest: Contest,
address: string
): Promise<boolean> {
const contestEntry = await contestEntryRepository.findOne({
where: {
and: [
{ contestId: contest.id },
{ address: address }
]
}
});
return contestEntry == null
}
根据您喜欢的代码结构,将 checkEnterContest
和 checkAddressEnterContestBefore
实现为 ContestEntryRepository
方法可能会更好。
关于dependency-injection - 如何在 loopback 4 中进行方法注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63614378/
我正在尝试将扩展的环回用户模型与 loopback-component-passport 一起用于 facebook 登录。登录本身是有效的,但我无法让它使用我的自定义用户模型而不是内置的“用户”。
用于文件(或文件)上传的 loopback-component-storage 文档是这样说的: loopback documentation 描述: Upload one or more files
在 lib/models/user-identity.js 中 function profileToUser(provider, profile, options) { // Let's c
我已在 iisnode Windows Web 应用程序上托管了我的环回 4 应用程序,该应用程序将端口作为管道提供,在我的环回 4 应用程序中,我将端口读取为 Process.env.PORT。我收
我使用环回来生成我的 api 和 AngularJS 来与之通信。我有一个模型叫 Sync包含以下记录: Sync": { "34": "{\"uuid\":\"287c6625-4a95-4e11-
我关注了Loopback4 datasources文档并放置 sample.datasource.json 和 sample.test.datasource.json 下的文件src/数据源 .每当我
如何在 Loopback 中定义 decimal(10,2)?我查看了 api 和示例,但无法正常工作。它只是不断地创建一个小数(10,0)。 columnName 确实会影响输出,但未设置精度和比例
我正在使用 Loopback,我想创建一个记录上传数量的上传接口(interface)。我将自己的模型与存储组件一起使用。 我正在使用存储组件的上传功能,并且我想在上传成功后更新对象属性“upload
场景是, 删除用户时,我们只是将名为“状态”的字段更新为 -1。 但是,在添加具有已删除电子邮件 ID 的用户时,内置的环回用户模型会抛出错误,因为电子邮件已存在,因为它仅检查电子邮件是否存在。我想检
我正在使用 Loopback 3 开发一个应用。我在 ServiceEvaluation 模型上创建了一个远程方法,以返回服务模型中的 ServiceEvaluations 和相关属性的列表。 Ser
我正在使用环回。在名为 Report 的模型中创建一个名为 stats 的新方法。我想在另一个名为 Acount 的模型中创建相同的方法,但参数是 id。 模型报告: Report.remoteMet
如何在环回中创建动态模型,而不是对所有模型使用命令“lb model”。 例如: 如果我想创建 30 个具有几乎相同属性的模型,那么会遇到一次又一次创建所有 30 个模型和那些相应属性的麻烦。 是否可
如何在环回中创建动态模型,而不是对所有模型使用命令“lb model”。 例如: 如果我想创建 30 个具有几乎相同属性的模型,那么会遇到一次又一次创建所有 30 个模型和那些相应属性的麻烦。 是否可
我正在开发一个环回项目,我有一个名为 Depot 的模型,它有一个字段 likersList,该字段是一个字符串数组(用户 id)我想找到其 likersList 中没有特定 userId 的所有 D
我很难理解 Loopback 4 中 Repositories 的概念,文档说: A Repository represents a specialized Service interface tha
所以我有下表: external_user_has_survey_question_answer 此表与表有 belongsTo 关系: external_user 现在我正在尝试查询 member_
我将 Loopback 3 与 Mysql 结合使用。我们使用动态数据模型。例如,包含“管理员”或“用户”等类型的 UserAnswers。我想为类型的 countOfAnswers 字段添加答案计数
我有一个环回应用程序,我希望能够在 API 调用中包含来自关系的计算属性。例如,假设我有一个 apartment 模型和一个 address 模型。 address 具有属性 city 和 state
对于某些端点,我在调用时返回一个函数而不是实际值(最后的代码)。看起来它只出现在我的 Patient 模型中的嵌套端点上。 例如localhost:3000/api/Patients/{id}/Mea
我是环回平台的新手。我按照这个教程loop-back official tutorial for third-party和本教程 also a tutorial that i find 。我想要做的是
我是一名优秀的程序员,十分优秀!