auto throw error if findOne doesn't find any doc
This commit is contained in:
		
							parent
							
								
									d4550a567a
								
							
						
					
					
						commit
						4c75b5cc7d
					
				| @ -1,7 +1,42 @@ | ||||
| import mongoose from "mongoose"; | ||||
| import { Schema } from "mongoose"; | ||||
| import mongoose, { Schema, Document } from "mongoose"; | ||||
| import mongooseAutoPopulate from "mongoose-autopopulate"; | ||||
| 
 | ||||
| type UpdateWithAggregationPipeline = UpdateAggregationStage[]; | ||||
| type UpdateAggregationStage = | ||||
| 	| { $addFields: any } | ||||
| 	| { $set: any } | ||||
| 	| { $project: any } | ||||
| 	| { $unset: any } | ||||
| 	| { $replaceRoot: any } | ||||
| 	| { $replaceWith: any }; | ||||
| type EnforceDocument<T, TMethods> = T extends Document ? T : T & Document & TMethods; | ||||
| 
 | ||||
| declare module "mongoose" { | ||||
| 	interface Model<T, TQueryHelpers = {}, TMethods = {}> { | ||||
| 		// removed null -> always return document -> throw error if it doesn't exist
 | ||||
| 		findOne( | ||||
| 			filter?: FilterQuery<T>, | ||||
| 			projection?: any | null, | ||||
| 			options?: QueryOptions | null, | ||||
| 			callback?: (err: CallbackError, doc: EnforceDocument<T, TMethods>) => void | ||||
| 		): QueryWithHelpers<EnforceDocument<T, TMethods>, EnforceDocument<T, TMethods>, TQueryHelpers>; | ||||
| 		findOneAndUpdate( | ||||
| 			filter?: FilterQuery<T>, | ||||
| 			update?: UpdateQuery<T> | UpdateWithAggregationPipeline, | ||||
| 			options?: QueryOptions | null, | ||||
| 			callback?: (err: any, doc: EnforceDocument<T, TMethods> | null, res: any) => void | ||||
| 		): QueryWithHelpers<EnforceDocument<T, TMethods>, EnforceDocument<T, TMethods>, TQueryHelpers>; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| var HTTPError: any; | ||||
| 
 | ||||
| try { | ||||
| 	HTTPError = require("lambert-server").HTTPError; | ||||
| } catch (e) { | ||||
| 	HTTPError = Error; | ||||
| } | ||||
| 
 | ||||
| mongoose.plugin(mongooseAutoPopulate); | ||||
| 
 | ||||
| mongoose.plugin((schema: Schema, opts: any) => { | ||||
| @ -17,6 +52,11 @@ mongoose.plugin((schema: Schema, opts: any) => { | ||||
| 			}); | ||||
| 		}, | ||||
| 	}); | ||||
| 	schema.post("findOne", (doc, next) => { | ||||
| 		if (!doc) return next(new HTTPError("Not found", 404)); | ||||
| 		// @ts-ignore
 | ||||
| 		return next(); | ||||
| 	}); | ||||
| }); | ||||
| 
 | ||||
| export * from "./Activity"; | ||||
|  | ||||
| @ -5,7 +5,6 @@ import EventEmitter from "events"; | ||||
| const uri = process.env.MONGO_URL || "mongodb://localhost:27017/fosscord?readPreference=secondaryPreferred"; | ||||
| import { URL } from "url"; | ||||
| 
 | ||||
| // TODO: auto throw error if findOne doesn't find anything
 | ||||
| const url = new URL(uri.replace("mongodb://", "http://")); | ||||
| 
 | ||||
| const connection = mongoose.createConnection(uri, { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Flam3rboy
						Flam3rboy