已经安装了 graphql-upload,执行
import { graphqlUploadExpress } from 'graphql-upload';
并收到此错误:错误:在 graphql-upload/package.json 中没有定义“exports”main
依赖项:
"graphql-upload": "^14.0.0",
"graphql": "15.8.0",
"graphql-request": "^4.2.0",
"graphql-tools": "^8.2.0",
"@nestjs/axios": "^0.0.7",
"@nestjs/common": "^8.4.1",
"@nestjs/config": "^1.1.5",
"@nestjs/core": "^8.4.1",
"@nestjs/graphql": "^9.1.2",
"@nestjs/platform-express": "^8.0.0",
Run Code Online (Sandbox Code Playgroud)
节点版本:v16.10.0
我正在按照NestJS 文档实现缓存。
为此创建新项目,以便文档示例与此没有区别。
import { CacheModule, Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [CacheModule.register()],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
import { CACHE_MANAGER, Controller, Get, Inject } from '@nestjs/common';
import { Cache } from 'cache-manager';
@Controller()
export class AppController {
constructor(
@Inject(CACHE_MANAGER) private cacheManager: Cache,
) {}
}
Run Code Online (Sandbox Code Playgroud)
@Get()
async getHello(): Promise<string> {
const value: string = await this.cacheManager.get('hello'); …Run Code Online (Sandbox Code Playgroud) 在 Nestjs 项目中,我遇到了一个库的问题,我没有在代码中直接使用它,但它被第三方使用。
node_modules\wrap-ansi\index.js:2 中的 stringWidth = require('string-width') 不支持
这是 package.json 依赖项:
"dependencies": {
"@nestjs-modules/mailer": "^1.9.1",
"@nestjs/common": "^10.1.2",
"@nestjs/config": "^3.0.0",
"@nestjs/core": "^10.1.2",
"@nestjs/event-emitter": "^2.0.2",
"@nestjs/jwt": "^10.0.3",
"@nestjs/mapped-types": "^2.0.2",
"@nestjs/passport": "^10.0.0",
"@nestjs/platform-express": "^10.1.2",
"@nestjs/swagger": "^7.1.4",
"@nestjs/throttler": "^4.0.0",
"@nestjs/typeorm": "^10.0.0",
"@ttshivers/automapper-classes": "^8.8.3",
"@ttshivers/automapper-core": "^8.8.3",
"@ttshivers/automapper-nestjs": "^8.8.3",
"bcrypt": "^5.1.0",
"class-transformer": "^0.5.1",
"class-validator": "^0.14.0",
"handlebars": "^4.7.8",
"nodemailer": "^6.9.7",
"passport": "^0.6.0",
"passport-custom": "^1.1.1",
"passport-jwt": "^4.0.1",
"passport-local": "^1.0.0",
"pg": "^8.11.0",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.2.0",
"typeorm": "^0.3.16"
},
"devDependencies": {
"@nestjs/cli": "^10.1.11",
"@nestjs/schematics": "^10.0.1",
"@nestjs/testing": "^10.1.2",
"@types/bcrypt": …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过实现一个干净的架构结构来测试Nestjs,并且想验证我的解决方案,因为我不确定我是否知道执行此操作的最佳方法。请注意,该示例几乎是伪代码,并且缺少许多类型或泛型,因为它们不是讨论的重点。
从我的域逻辑开始,我可能想在类似于以下类的类中实现它:
@Injectable()
export class ProfileDomainEntity {
async addAge(profileId: string, age: number): Promise<void> {
const profile = await this.profilesRepository.getOne(profileId)
profile.age = age
await this.profilesRepository.updateOne(profileId, profile)
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我需要访问profileRepository,但是按照干净架构的原理,我现在不想为实现而烦恼,所以我为此写了一个接口:
interface IProfilesRepository {
getOne (profileId: string): object
updateOne (profileId: string, profile: object): bool
}
Run Code Online (Sandbox Code Playgroud)
然后,将依赖项注入到ProfileDomainEntity构造函数中,并确保它遵循预期的接口:
export class ProfileDomainEntity {
constructor(
private readonly profilesRepository: IProfilesRepository
){}
async addAge(profileId: string, age: number): Promise<void> {
const profile = await this.profilesRepository.getOne(profileId)
profile.age = age
await this.profilesRepository.updateOne(profileId, profile)
}
}
Run Code Online (Sandbox Code Playgroud)
然后创建一个简单的内存实现,让我运行代码:
class ProfilesRepository …Run Code Online (Sandbox Code Playgroud) domain-driven-design dependency-injection typescript clean-architecture nestjs
我有一个非常普通的GraphQL模式,如下所示(伪代码):
Post {
commentsPage(skip: Int, limit: Int) {
total: Int
items: [Comment]
}
}
Run Code Online (Sandbox Code Playgroud)
因此,为避免在请求多个Post对象时出现n + 1问题,我决定使用Facebook的Dataloader。
由于我正在使用Nest.JS 3层分层应用程序(Resolver-Service-Repository),因此我有一个问题:
应该使用DataLoader包装存储库方法还是应该使用Dataloder包装服务方法?
下面是我的返回Comments页面的服务方法的示例(即,从commentsPage属性解析器调用的此方法)。内部服务方法中,我使用2个存储库方法(#count 和#find):
@Injectable()
export class CommentsService {
constructor(
private readonly repository: CommentsRepository,
) {}
async getCommentsPage(postId, dataStart, dateEnd, skip, limit): PaginatedComments {
const counts = await this.repository.getCount(postId, dateStart, dateEnd);
const itemsDocs = await this.repository.find(postId, dateStart, dateEnd, skip, limit);
const items = this.mapDbResultToGraphQlType(itemsDocs);
return new PaginatedComments(total, items)
}
}
Run Code Online (Sandbox Code Playgroud)
因此,我应该为每个存储库方法(#count, …
我已经在 Nestjs 中编写了身份验证路由,并希望将它与表单数据一起使用。我让它与 URL-encoded-form-data、JSON、文本一起工作,但是当我使用表单数据时没有在正文中收到任何东西,并且真的希望它像在前端一样使用表单数据我正在点击带有表单数据的路由。我已经尝试了所有可以在网络上找到的方法,但在这种情况下,没有一种方法对我有帮助。所以经过数小时的搜索和尝试,当我没有得到任何线索时,我在这里发布了我的问题。任何形式的帮助表示赞赏。
我的后端 API 使用 NestJS、TypeORM 和 GraphQL。我收到以下错误:
GraphQLError [Object]: Query root type must be provided.
at SchemaValidationContext.reportError (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/type/validate.js:88:19)
at validateRootTypes (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/type/validate.js:107:13)
at validateSchema (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/type/validate.js:52:3)
at graphqlImpl (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/graphql.js:79:62)
at /home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/graphql.js:28:59
at new Promise (<anonymous>)
at Object.graphql (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/graphql.js:26:10)
at GraphQLSchemaFactory.<anonymous> (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/@nestjs/graphql/dist/schema-builder/graphql-schema.factory.js:49:52)
at Generator.next (<anonymous>)
at /home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/tslib/tslib.js:114:75
Run Code Online (Sandbox Code Playgroud)
有人可以帮帮我吗。我的仓库:https : //github.com/wise-introvert/nestjs-graphql-api.git
我正在尝试设置我的 graphql resover 来处理一组对象,但无法配置 @Args 装饰器。
我创建了自己的 ArgsType
import { ArgsType, Field, Int, ObjectType } from '@nestjs/graphql';
@ArgsType() // to be used as type in the resolver
@ObjectType() // for schema generation
export class Club {
@Field(type => String)
president: string;
@Field(type => Int)
members?: number;
}
Run Code Online (Sandbox Code Playgroud)
添加单个俱乐部的解析器工作正常!
@Query(() => Int)
async addClub(@Args() club: Club) {
// handle stuff
}
Run Code Online (Sandbox Code Playgroud)
但如果我想像这样提供一系列俱乐部
@Query(() => Int)
async addClubs(@Args({name: 'clubs', type: () => [Club]}) clubs: Array<Club>) {
// handle stuff
}
Run Code Online (Sandbox Code Playgroud)
这在 Nest …
我正在尝试将 Swagger 添加到我的 Nestjs 应用程序中。当我试图编译它时,会抛出找不到模块的错误。我使用 Nestjs 文档中的相同代码。这是我的 main.ts:
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const config = new DocumentBuilder()
.setTitle('Cats example')
.setDescription('The cats API description')
.setVersion('1.0')
.addTag('cats')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api', app, document);
await app.listen(3000);
}
bootstrap();
Run Code Online (Sandbox Code Playgroud)
这是错误:
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module '@nestjs/core/router/route-path-factory'
Require stack:
- D:\BK\solidity\MVPApp\blockchain\back-end-student-wallet-v2\node_modules\@nestjs\swagger\dist\swagger-explorer.js
- D:\BK\solidity\MVPApp\blockchain\back-end-student-wallet-v2\node_modules\@nestjs\swagger\dist\swagger-scanner.js
- D:\BK\solidity\MVPApp\blockchain\back-end-student-wallet-v2\node_modules\@nestjs\swagger\dist\swagger-module.js
- D:\BK\solidity\MVPApp\blockchain\back-end-student-wallet-v2\node_modules\@nestjs\swagger\dist\index.js
- D:\BK\solidity\MVPApp\blockchain\back-end-student-wallet-v2\node_modules\@nestjs\swagger\index.js
- D:\BK\solidity\MVPApp\blockchain\back-end-student-wallet-v2\dist\main.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
Run Code Online (Sandbox Code Playgroud)
我正在使用 Node 14.15.1,@nestjs/swagger 5.0.0,swagger-ui-express:4.1.6
nestjs ×10
graphql ×4
typescript ×4
javascript ×3
node.js ×2
body-parser ×1
dataloader ×1
postgresql ×1
req ×1
swagger ×1
swagger-ui ×1
typeorm ×1