对于我的下一个项目,我想在前端使用 Graphql。此外,这个项目还应该提供一个 Rest-Api。现在我发现了这个非常伟大的框架“nestjs”,理论上可以将 Graphql 端点和 Rest 端点结合起来。不幸的是,如果这会导致问题,我在文档中找不到任何内容。下面的代码可以正常使用吗?
阿蒂克尔控制器:
@Controller('article')
@Resolver('Article')
export class ArticleController {
constructor(private articleService: ArticleService){}
@Get()
@Query(returns => CArticle)
async Article() {
const dbElement=await this.articleService.getById("xy");
return dbElement;
}
}
Run Code Online (Sandbox Code Playgroud)
文章模块:
@Module({
controllers:[ArticleController],
providers:[ArticleService,ArticleController]
})
export class ArticleModule {}
Run Code Online (Sandbox Code Playgroud) 我的客户期望所有成功的状态代码都等于 200。但是 NestJS 默认对所有 POST 方法使用 201。如何在应用程序范围内禁用 POST 201?不是针对一种方法,而是针对整个应用程序。
我想根据此文档提供一些静态目录结构https://docs.nestjs.com/recipes/serve-static#serve-static但可以找到这些简单问题的答案:
提前致谢。
PS 我看到了一些答案,app.useStaticAssets()但据我了解,这是 Express 特定的解决方案,无论如何都不会使用最新版本进行编译(Property 'useStaticAssets' does not exist on type 'INestApplication')...
更新
例如我有这些目录:
我希望它被用作:
ConfigService我正在尝试在我的中使用,users.module.ts但我得到了
错误:Nest 无法解析 UsersService(UserRepository、HttpService、?)的依赖项。请确保索引 [2] 处的参数 ConfigService 在 UsersModule 上下文中可用。
潜在的解决方案:
我已将 ConfigModule 导入到我的 UsersModule 中,但仍然无法正常工作:(
应用程序模块.ts
@Module({
imports: [
ConfigModule.forRoot({
expandVariables: true,
}),
TypeOrmModule.forRoot(),
UsersModule,
AuthModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
用户.module.ts
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([User])],
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService],
})
export class UsersModule {}
Run Code Online (Sandbox Code Playgroud)
用户.service.ts
export class UsersService { …Run Code Online (Sandbox Code Playgroud) 我正在使用 NestJS jwt 护照来验证用户。我遵循文档,这是我的应用程序模块:
import { Module } from '@nestjs/common';
import { UserModule } from './user/user.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthModule } from './auth/auth.module';
import { ConfigModule } from '@nestjs/config';
import configuration from '../config/configuration';
@Module({
imports: [
ConfigModule.forRoot({
load: [configuration],
}),
TypeOrmModule.forRoot(),
UserModule,
AuthModule,
],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
这是我的身份验证模块:
import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { PassportModule } from '@nestjs/passport';
import { UserModule } from '../user/user.module';
import …Run Code Online (Sandbox Code Playgroud) 我正在开发一个读取哈巴狗模板的电子邮件模块。
我无法让构建包含 *.pug 模板文件:
我已按照以下说明进行操作: https://github.com/nestjs/nest-cli/issues/320
在nest-cli.json中添加资产属性
"email": {
"type": "library",
"root": "libs/email",
"entryFile": "index",
"sourceRoot": "libs/email/src",
"compilerOptions": {
"tsConfigPath": "libs/email/tsconfig.lib.json"
},
"assets": ["**/*.pug"]
},
Run Code Online (Sandbox Code Playgroud) 我使用 Mongdoose 和 Nestjs 创建了一个简单的 REST API。我总共进行了 2 次测试,但都失败了。\n测试输出:
\n\n\n\n\nFAIL src/app/auth/auth.service.spec.ts\n \xe2\x97\x8f 测试套件运行失败
\n
Cannot find module \'@shared/errors\' from \'auth.service.ts\'\n\n 5 | \n 6 | import { AppLogger } from \'../logger/logger\';\n> 7 | import { Errors } from \'@shared/errors\';\n | ^\n 8 | import { ILoginDto } from \'./dto/login.dto\';\n 9 | import { ITokenDto } from \'./dto/auth.dto\';\n 10 | import { IUser } from \'@user/document/user.doc\';\n\n at Resolver.resolveModule (../../node_modules/jest-resolve/build/index.js:259:17)\n at Object.<anonymous> (auth/auth.service.ts:7:1)\nRun Code Online (Sandbox Code Playgroud)\n\nFAIL src/app/user/user.service.spec.ts\n \xe2\x97\x8f 测试套件运行失败
\n\n …有没有办法访问请求的原始正文?不是已经解析成json了吗?
@Injectable()
export class WooGuard implements CanActivate {
secret: string;
constructor(
private readonly reflector: Reflector,
private configService: ConfigService,
) {
this.secret = this.configService.get<string>("woocommerce.webhook.secret");
}
async canActivate(
context: ExecutionContext,
): Promise<boolean> {
const request = context.switchToHttp().getRequest<Request>();
request.body // this is parsed json
// I am calculating the sha256 hash of the body with a secret for a webhook.
// due to how the raw json is vs. the JSON.stringify(request.body), the signature is never the same.
}
}
Run Code Online (Sandbox Code Playgroud) 我想将URL客户端发送的图像存储multipart/form-data在我的MySQL数据库中。我遵循了文档,但我无法真正找出应该如何将图像保存在服务器文件系统中并将 URL 返回给客户端。
这是我的代码:
@ApiTags('product-image')
@Controller('product-image')
export class ProductImageController {
constructor(public service: ProductImageService) {
}
@Post('upload')
@UseInterceptors(FilesInterceptor('files'))
uploadImage(@UploadedFiles() files) {
console.log(files);
// How can I save image files in
// a custom path and return the path
// back to the client?
}
}
Run Code Online (Sandbox Code Playgroud) 我试图在不破坏 DI 层的情况下创建一个新实例,从而允许我的实例访问其构造函数中使用的所有可注入服务
我目前拥有的示例不允许我使用任何可注入服务:
const camera: Camera = new Camera(id, options);
Run Code Online (Sandbox Code Playgroud)
使用这种方法,相机类无法导入任何可注入的单例或类。
我在这里读到您可以使用它moduleRef来创建新实例,因此我尝试了以下操作:
const camera: Camera = await this.moduleRef.create(Camera);
Run Code Online (Sandbox Code Playgroud)
但现在的问题是,我无法传递ID和Options参数,唯一的解决方案是在初始化后立即使用设置器。
问题:
如何创建一个类的新实例(不是单例),由 Nest 的注入器创建并在最新版本的 NestJS 中创建时传递自定义参数?