1
0
mirror of https://github.com/spacebarchat/server.git synced 2024-11-11 05:02:37 +01:00

auto throw error if findOne doesn't find any doc

This commit is contained in:
Flam3rboy 2021-07-10 17:51:19 +02:00
parent d4550a567a
commit 4c75b5cc7d
2 changed files with 42 additions and 3 deletions

View File

@ -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";

View File

@ -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, {