在expressjs、mongodb和inversifyjs中的db操作回调之前获得204个响应
我想将新文档添加到mongodb中,并获得一个插入的id作为201状态的响应,但当调用db.insertOne时,我会在tap工作之前获得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
@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');