【发布时间】:2022-02-21 16:19:11
【问题描述】:
我面临一个问题,即在处理数据后,nestjs 服务器没有响应或向客户端发送响应。我创建了一个端点,它需要时间来处理数据并将其插入数据库。我知道这不是一个好的做法,但这几天需要。 如果请求在 4m 18s 内完成,服务器会响应,但再过几秒钟,它就不会响应。没有超时或任何类型的错误被抛出。我尝试从邮递员发送请求,但服务器和邮递员都没有超时。如果我遗漏了任何东西,我也尝试过 try-catch。我正在通过 pm2 部署嵌套服务器。所以我尝试在没有 pm2 的情况下运行服务器,但结果相同。但是,如果它是本地主机,在我的本地环境和服务器上,服务器也会响应。
我对这个错误和任何问题都不知所措。以下是我正在运行的设置:
- Azure 虚拟机 - B4ms(16GB RAM,4 个 vCPU)
- Ubuntu 20.04
- Nodejs (14.18.2)
- Nestjs (7.0)
- pm2 (5.1.2)
下面是我的 main.ts 文件
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { urlencoded, json } from 'express';
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
logger: ['log', 'error', 'verbose']
});
// app.setGlobalPrefix('api');
app.use(json({ limit: '500mb' }));
app.use(urlencoded({ extended: true, limit: '500mb' }));
await app.listen(3000);
}
bootstrap();
以下是端点控制器所属的入职模块:
import { Module } from '@nestjs/common';
import { BatchService } from 'src/batch/batch.service';
import { USERS, OFFICES, USER_BATCH, BATCH, SCHEME, USER_OFFICE, DISTRICTS, ONBOARDED_BATCH_DETAILS } from '../core/constants/index';
import { UtilsService } from 'src/core/utils/utils.service';
import scheme from '../models/scheme';
import { SchemesService } from '../schemes/schemes.service';
import batch from '../models/batch';
import offices from '../models/offices';
import users from '../models/user.entity';
import user_batch from '../models/user_batch';
import { OfficeService } from '../office/office.service';
import { UserBatchService } from '../user-batch/user-batch.service';
import { UsersService } from '../users/users.service';
import { OnboardingController } from './onboarding.controller';
import { OnboardingService } from './onboarding.service';
import { UserOfficeService } from '../user-office/user-office.service';
import user_office from '../models/user_office';
import { HttpModule } from '@nestjs/axios';
import { DistrictService } from '../district/district.service';
import district from '../models/district';
import { OnboardedBatchDetailsService } from '../onboarded-batch-details/onboarded-batch-details.service';
import { onboarded_batch_details } from '../models/onboarded_batch_details';
@Module({
imports: [
HttpModule
],
controllers: [OnboardingController],
providers: [
OnboardingService,
UsersService,
{ provide: USERS, useValue: users },
OfficeService,
{ provide: OFFICES, useValue: offices },
UtilsService,
UserBatchService,
{ provide: USER_BATCH, useValue: user_batch },
BatchService,
{ provide: BATCH, useValue: batch },
SchemesService,
{ provide: SCHEME, useValue: scheme},
UserOfficeService,
{ provide: USER_OFFICE, useValue: user_office },
DistrictService,
{ provide: DISTRICTS, useValue: district },
OnboardedBatchDetailsService,
{ provide: ONBOARDED_BATCH_DETAILS, useValue: onboarded_batch_details }
]
})
export class OnboardingModule {}
下面是我的端点代码。
@Post('/test-batch-onboard')
@HttpCode(200)
async testBatchOnbard(
@Headers('apiKey') apiKey,
@Body() data: Array<BatchData>,
){
return new Promise((resolve, reject) => {
let t = 259000; // 4m 19s -- no response
let d = this.addBatchStudentData(apiKey, data);
try{
setTimeout(function () {
resolve("I'm done here after \n" + t/60000 + " mins.");
}, t);
}
catch(e){
console.log(e);
reject(new InternalServerErrorException());
}
})
}
这是我的 app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config/dist/config.module';
import { ScheduleModule } from '@nestjs/schedule';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AttendanceController } from './attendance/attendance.controller';
import { DatabaseModule } from './core/database/database.module';
import { AttendanceService } from './attendance/attendance.service';
import { AttendanceModule } from './attendance/attendance.module';
import { UsersModule } from './users/users.module';
import UserAttendance from './models/user_attendance';
import { BATCH, DISTRICTS, OFFICES, ONBOARDED_BATCH_DETAILS, ORGANIZATIONS, USERS, USER_ATTENDANCE, USER_BATCH } from './core/constants';
import { SchedulerModule } from './scheduler/scheduler.module';
import { ReportsModule } from './reports/reports.module';
import { OfficeModule } from './office/office.module';
import { OrganizationModule } from './organization/organization.module';
import { DailyAttendanceTasksService } from './jobs/dailyAttendanceReport.job';
import { UsersService } from './users/users.service';
import { OfficeService } from './office/office.service';
import { OrganizationService } from './organization/organization.service';
import { BatchService } from './batch/batch.service';
import { UtilsService } from './core/utils/utils.service';
import { MailgunService } from './core/utils/mailgun.service';
import { UserBatchModule } from './user-batch/user-batch.module';
import { BatchModule } from './batch/batch.module';
import { OnboardingModule } from './onboarding/onboarding.module';
import { SchemesModule } from './schemes/schemes.module';
import { UserOfficeModule } from './user-office/user-office.module';
import { DistrictService } from './district/district.service';
import { OnboardedBatchDetailsService } from './onboarded-batch-details/onboarded-batch-details.service';
import users from './models/user.entity';
import offices from './models/offices';
import organizations from './models/organizations';
import user_attendance from './models/user_attendance';
import batch from './models/batch';
import district from './models/district';
import { onboarded_batch_details } from './models/onboarded_batch_details';
import { SendBatchDataEmailJobService } from './scheduler/send-batch-data-email-job.service';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
ScheduleModule.forRoot(),
UsersModule,
AttendanceModule,
DatabaseModule,
SchedulerModule,
ReportsModule,
OfficeModule,
OrganizationModule,
UserBatchModule,
BatchModule,
OnboardingModule,
SchemesModule,
UserOfficeModule,
],
controllers: [AppController],
providers: [
AppService,
UsersService,
{ provide: USERS, useValue: users},
OfficeService,
{ provide: OFFICES, useValue: offices },
OrganizationService,
{ provide: ORGANIZATIONS, useValue: organizations },
AttendanceService,
{ provide: USER_ATTENDANCE, useValue: user_attendance },
UsersService,
{ provide: USER_BATCH, useValue: USER_BATCH },
BatchService,
{ provide: BATCH, useValue: batch },
DistrictService,
{ provide: DISTRICTS, useValue: district },
OnboardedBatchDetailsService,
{ provide: ONBOARDED_BATCH_DETAILS, useValue: onboarded_batch_details },
DailyAttendanceTasksService,
UtilsService,
MailgunService,
DistrictService,
OnboardedBatchDetailsService
],
})
export class AppModule { }
上面的代码在我的本地环境和服务器的本地主机中工作。如果您尝试在服务器上本地发送 curl 发布请求,它会返回响应,但对于任何其他请求,它根本不响应。我尝试使用this 增加nestjs 超时,但没有效果。自 2 天以来,我一直在寻找此问题的解决方案,但找不到。非常感谢任何帮助。谢谢。
编辑
以上代码在AWS EC2实例上正常运行并返回响应。
【问题讨论】:
-
请展示您的 AppModule
标签: node.js amazon-ec2 timeout nestjs azure-vm