Skip to content

Instantly share code, notes, and snippets.

@btdrawer
Created November 15, 2019 11:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save btdrawer/60b7179f71fc9a7253fa3fc4b7a968bc to your computer and use it in GitHub Desktop.
Save btdrawer/60b7179f71fc9a7253fa3fc4b7a968bc to your computer and use it in GitHub Desktop.
A JavaScript file that aims to remove a lot of the boilerplate code that typically emerges in route functions in Express.js/MongoDB server projects.
// Example handlers - change this to your own handler functions if necessary
const handleSuccess = (res, data) => res.status(200).send(data);
const handleError = (res, err) => res.status(400).send(err);
// Generic template for requests not covered by other functiomns
exports.generic = async (model, func, res, method, ...args) => {
try {
const obj = await model[func](...args);
handleSuccess(res, obj, method);
} catch (err) {
handleError(res, err);
}
}
exports.post = async (model, res, payload) => {
try {
const obj = new model(payload);
await obj.save();
handleSuccess(res, obj, "POST");
} catch (err) {
handleError(res, err);
}
};
exports.getAll = async (model, res, query, fieldsToReturn) => {
try {
let obj;
if (fieldsToReturn) {
fieldsToReturn = fieldsToReturn.reduce((fields, field) => {
fields[field] = 1;
return fields;
}, {});
obj = await model.find(query || {}, fieldsToReturn);
} else {
obj = await model.find(query || {});
}
handleSuccess(res, obj, "GET");
} catch (err) {
handleError(res, err);
}
};
exports.getOne = async (model, res, query, fieldsToReturn) => {
try {
const obj = fieldsToReturn
? await model.findOne(query, fieldsToReturn)
: await model.findOne(query);
handleSuccess(res, obj, "GET");
} catch (err) {
handleError(res, err);
}
};
exports.put = async (model, res, query, payload) => {
for (let prop in payload) {
if (!payload[prop]) delete payload[prop];
}
try {
const obj = await model.findOneAndUpdate(query, payload, { new: true });
handleSuccess(res, obj, "PUT");
} catch (err) {
handleError(res, err);
}
};
exports.delete = async (model, res, query) => {
try {
const obj = await model.findOneAndDelete(query);
handleSuccess(res, obj, "DELETE");
} catch (err) {
handleError(res, err);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment