在expressjs、mongodb和inversifyjs中的db操作回调之前获得204个响应

在expressjs、mongodb和inversifyjs中的db操作回调之前获得204个响应,mongodb,typescript,express,observable,inversifyjs,Mongodb,Typescript,Express,Observable,Inversifyjs,我想将新文档添加到mongodb中,并获得一个插入的id作为201状态的响应,但当调用db.insertOne时,我会在tap工作之前获得204状态代码的响应。这是我的控制器 @controller('/stars') export class StarController { constructor(@inject(TYPES.StarService) private starService: IStarService) {} @httpPost('/') public newSta

我想将新文档添加到mongodb中,并获得一个插入的id作为201状态的响应,但当调用db.insertOne时,我会在tap工作之前获得204状态代码的响应。这是我的控制器

@controller('/stars')
export class StarController {

   constructor(@inject(TYPES.StarService) private starService: IStarService) {}

@httpPost('/')
public newStar(request: Request, response: Response) {
    this.starService.insert(request.body)
        .pipe(
            tap(result => response.status(201).json(result))
        ).subscribe();
}
}
为我服务

@injectable()
export class StarService implements IStarService {
private mongoClient: MongoDBClient;

constructor(@inject(TYPES.MongoDBClient) mongoClient: MongoDBClient) {
    this.mongoClient = mongoClient;
}

 public insert(star) {
    return this.mongoClient.insertOne(star, 'stars');
}
在MongoDBClient中

   public insertOne<T>(document: T, collectionName: string): Observable<ObjectID> {
    return from(
        this.db.collection(collectionName).insertOne(document))
        .pipe(
            map(
                (result: InsertOneWriteOpResult) => {
                    return result.insertedId;
                }));
}
public insertOne(document:T,collectionName:string):可观察{
归来(
this.db.collection(collectionName).insertOne(document))
.烟斗(
地图(
(结果:InsertOnWriteOpResult)=>{
返回result.insertedId;
}));
}

如何使用正确的状态代码和正文获得json响应。正如我在您的案例中所理解的,当您调用insert时,它工作,但当您调用insertOne时,它返回204?嗨,Armen。感谢您的回复。不,在
this.db.collection(collectionName).insertOne(document)
之后,我立即得到204个响应。然后
map((result:insertonwriteopresult)=>{return result.insertedId;})
工作。当
response.status(201).json(result)工作时
称为“发送后无法设置头”的“我收到错误”很容易捕获,此错误意味着您已经发送了http响应头,无法更改或覆盖。它与您的http响应相关联,并且不会衡量您使用的mongodb、ms sql或mysql,我建议您手动设置http头,不要像这样尝试更改它;所以有一个…sorry response.addHeader是节点js上的java代码,您可以执行res.set('Content-Type','application/json');