当前,我正在学习Nestjs,我发现Nestjs拥有自己的npm软件包列表,例如@ nestjs / cqrs,@ nestjs / jwt等。所有软件包的完整列表为https://www.npmjs.com/org/nestjs。 现在我有一个疑问,我们是否可以在可用于任何Node.js应用程序(如morgan,windston等)的nestjs中使用所有npm软件包。 或者,我们只能使用nestjs文档列表中提到的软件包。
答案 0 :(得分:0)
Nest
是一个在HTTP适配器之上运行的框架(我知道的主要两个是Fastify
和Express
,其中Express
是默认适配器) 。如果您要使用的程序包可以与express(例如Morgan
)一起使用,那就没问题了。如果您要使用的软件包与平台无关(例如Pino
或Winston
),则没有问题。如果您要使用的软件包用于其他HTTP适配器(例如koa-router
),那么您会遇到问题(反例是@hapi/joi
,由hapi
框架维护者维护) ,但实际上适用于任何事物)。我想到了一些特定于打字稿的软件包class-validator
和class-transformer
,但是总的来说,如果该软件包可在任何节点环境下使用,则可以在Nest
下使用。如果您对软件包和实现you could always check out the discord有任何疑问,请在此处提问。
答案 1 :(得分:0)
Nest将公开http适配器,以便您可以挂接到它,这是使用morgan&body-parser npm软件包的示例:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ConfigService } from './config/config.service';
import { ConfigModule } from './config/config.module';
import bodyParser from 'body-parser';
import morgan from 'morgan';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const configService = app.select(ConfigModule).get(ConfigService);
app.use(bodyParser.json());
app.use(morgan('dev'));
app.enableCors();
await app.listen(configService.PORT, () => console.log(`Server listening on port ${configService.PORT}`));
}
bootstrap();
在此实例中,app
上方是一个明确的实例。
答案 2 :(得分:0)
首先,可以将Nest.js软件包及其custom provider用于Nestjs。因此,请参阅当前文档。
第二,Nestjs核心团队的Brunner在Nestjs_framework Reddit上帮助了我。他在Github上为我们做了一个很好的简短示例。我要求他将名称从reddit更改为node,以便断开此链接,但是您可以在他的Github网站上找到它。他应得的荣誉。
我们不应该链接到SO解决方案。因此,让我们开始吧。
布鲁纳改变了我的架构,我喜欢他的方法。我想使用没有Nestjs模块的Cloudinary Node SDK。这应该可以导入任何Node包,至少这是我的理解。
注意:当您编写this.cloudinary时。您希望在“。”之后看到方法列表。 。您不会,所以只需使用SDK或程序包文档告诉您的任何代码即可。有点奇怪。
Cloudinary组件位于我的成员目录内的文件夹中,该文件夹中导入了一堆模块。
cloudinary.module.ts
import { Module } from '@nestjs/common';
import { cloudinaryProvider } from './cloudinary.provider';
import { CloudinaryService } from './cloudinary.service';
@Module({
providers: [cloudinaryProvider, CloudinaryService],
exports: [cloudinaryProvider],
})
export class CloudinaryModule {}
cloudinary.provider.ts
import { Provider } from '@nestjs/common';
import * as CloudinaryLib from 'cloudinary';
export const Cloudinary = 'lib:cloudinary';
export const cloudinaryProvider: Provider = {
provide: Cloudinary,
useValue: CloudinaryLib,
};
cloudinary.service.ts
import { Injectable, Inject } from '@nestjs/common';
import { Cloudinary } from './cloudinary.provider';
@Injectable()
export class CloudinaryService {
constructor(
@Inject(Cloudinary) private cloudinary
) {
// console.log('This is the cloudinary instance:');
// console.log(this.cloudinary);
}
}
最后是父模块:
members.module.ts
import { CloudinaryModule } from './cloudinary/cloudinary.module'
@Module({
imports: [
CloudinaryModule,
...