UNPKG

mongo-express-leufu

Version:

Web-based admin interface for MongoDB

156 lines (129 loc) 4.07 kB
"use strict"; var bson = require("../bson"); const buildCollectionURL = require("../utils").buildCollectionURL; var routes = function(config, socket) { var exp = {}; exp.getProperty = function(req, res) { // Get a single property // URI like database/collection/document/prop res.send(req.prop); }; exp.viewDocument = function(req, res) { var ctx = { title: (config.options.readOnly ? "Viewing" : "Editing") + " Document: " + req.document._id, editorTheme: config.options.editorTheme, docLength: bson.toString(req.document).split(/\r\n|\r|\n/).length, docString: bson.toString(req.document), }; res.render("document", ctx); }; exp.checkValid = function(req, res) { var doc = req.body.document; try { bson.toBSON(doc); } catch (err) { console.error(err); return res.send("Invalid"); } res.send("Valid"); }; exp.addDocument = function(req, res) { var doc = req.body.document; if (doc === undefined || doc.length === 0) { req.session.error = "You forgot to enter a document!"; return res.redirect("back"); } var docBSON; try { docBSON = bson.toBSON(doc); } catch (err) { req.session.error = "That document is not valid!"; console.error(err); return res.redirect("back"); } req.collection.insert(docBSON, { safe: true }, function(err) { if (err) { req.session.error = "Something went wrong: " + err; console.error(err); return res.redirect("back"); } console.log("docBSON :", docBSON); req.session.success = "Document added!"; socket.emit("new_document", { collection_name: req.collectionName, db_name: req.dbName, doc: docBSON, }); res.redirect( buildCollectionURL(res.locals.baseHref, req.dbName, req.collectionName) ); }); }; exp.updateDocument = function(req, res) { var doc = req.body.document; if (doc === undefined || doc.length === 0) { req.session.error = "You forgot to enter a document!"; return res.redirect("back"); } var docBSON; try { docBSON = bson.toBSON(doc); } catch (err) { req.session.error = "That document is not valid!"; console.error(err); return res.redirect("back"); } docBSON._id = req.document._id; req.collection.update(req.document, docBSON, { safe: true }, function(err) { if (err) { //document was not saved req.session.error = "Something went wrong: " + err; console.error(err); return res.redirect("back"); } req.session.success = "Document updated!"; socket.emit("document_updated", { collection_name: req.collectionName, db_name: req.dbName, doc: docBSON, }); res.redirect( buildCollectionURL(res.locals.baseHref, req.dbName, req.collectionName) ); }); }; exp.deleteDocument = function(req, res) { const skip = req.query.skip || ""; const key = req.query.key || ""; const value = req.query.value || ""; const type = req.query.type || ""; const jsonQuery = req.query.query || ""; const jsonProjection = req.query.projection || ""; req.collection.remove(req.document, { safe: true }, function(err) { if (err) { req.session.error = "Something went wrong! " + err; console.error(err); return res.redirect("back"); } req.session.success = "Document deleted! _id: " + req.document._id; socket.emit("document_deleted", { collection_name: req.collectionName, db_name: req.dbName, doc: req.document, }); res.redirect( buildCollectionURL( res.locals.baseHref, req.dbName, req.collectionName ) + `?skip=${skip}&key=${key}&value=${value}&type=${type}&query=${jsonQuery}&projection=${jsonProjection}` ); }); }; return exp; }; module.exports = routes;