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 mongoose, { Schema, Document } from "mongoose";
|
||||||
import { Schema } from "mongoose";
|
|
||||||
import mongooseAutoPopulate from "mongoose-autopopulate";
|
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(mongooseAutoPopulate);
|
||||||
|
|
||||||
mongoose.plugin((schema: Schema, opts: any) => {
|
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";
|
export * from "./Activity";
|
||||||
|
@ -5,7 +5,6 @@ import EventEmitter from "events";
|
|||||||
const uri = process.env.MONGO_URL || "mongodb://localhost:27017/fosscord?readPreference=secondaryPreferred";
|
const uri = process.env.MONGO_URL || "mongodb://localhost:27017/fosscord?readPreference=secondaryPreferred";
|
||||||
import { URL } from "url";
|
import { URL } from "url";
|
||||||
|
|
||||||
// TODO: auto throw error if findOne doesn't find anything
|
|
||||||
const url = new URL(uri.replace("mongodb://", "http://"));
|
const url = new URL(uri.replace("mongodb://", "http://"));
|
||||||
|
|
||||||
const connection = mongoose.createConnection(uri, {
|
const connection = mongoose.createConnection(uri, {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user