UNPKG

7.12 kBJavaScriptView Raw
1var express = require('express');
2var router = express.Router();
3var _ = require('lodash');
4var common = require('./common');
5
6// runs on all routes and checks password if one is setup
7router.all('/collection/*', common.checkLogin, function (req, res, next){
8 next();
9});
10
11// Create a new collection
12router.post('/collection/:conn/:db/coll_create', function (req, res, next){
13 var connection_list = req.app.locals.dbConnections;
14
15 // Check for existance of connection
16 if(connection_list[req.params.conn] === undefined){
17 res.status(400).json({'msg': req.i18n.__('Invalid connection')});
18 return;
19 }
20
21 // Validate database name
22 if(req.params.db.indexOf(' ') > -1){
23 res.status(400).json({'msg': req.i18n.__('Invalid database name')});
24 }
25
26 // Get DB form pool
27 var mongo_db = connection_list[req.params.conn].native.db(req.params.db);
28
29 // adding a new collection
30 mongo_db.createCollection(req.body.collection_name, function (err, coll){
31 if(err){
32 console.error('Error creating collection: ' + err);
33 res.status(400).json({'msg': req.i18n.__('Error creating collection') + ': ' + err});
34 }else{
35 res.status(200).json({'msg': req.i18n.__('Collection successfully created')});
36 }
37 });
38});
39
40// Rename an existing collection
41router.post('/collection/:conn/:db/:coll/coll_name_edit', function (req, res, next){
42 var connection_list = req.app.locals.dbConnections;
43
44 // Check for existance of connection
45 if(connection_list[req.params.conn] === undefined){
46 res.status(400).json({'msg': req.i18n.__('Invalid connection')});
47 return;
48 }
49
50 // Validate database name
51 if(req.params.db.indexOf(' ') > -1){
52 res.status(400).json({'msg': req.i18n.__('Invalid database name')});
53 }
54
55 // Get DB form pool
56 var mongo_db = connection_list[req.params.conn].native.db(req.params.db);
57
58 // change a collection name
59 mongo_db.collection(req.params.coll).rename(req.body.new_collection_name, {'dropTarget': false}, function (err, coll_name){
60 if(err){
61 console.error('Error renaming collection: ' + err);
62 res.status(400).json({'msg': req.i18n.__('Error renaming collection') + ': ' + err});
63 }else{
64 res.status(200).json({'msg': req.i18n.__('Collection successfully renamed')});
65 }
66 });
67});
68
69// Delete a collection
70router.post('/collection/:conn/:db/coll_delete', function (req, res, next){
71 var connection_list = req.app.locals.dbConnections;
72
73 // Check for existance of connection
74 if(connection_list[req.params.conn] === undefined){
75 res.status(400).json({'msg': req.i18n.__('Invalid connection')});
76 return;
77 }
78
79 // Validate database name
80 if(req.params.db.indexOf(' ') > -1){
81 res.status(400).json({'msg': req.i18n.__('Invalid database name')});
82 }
83
84 // Get DB form pool
85 var mongo_db = connection_list[req.params.conn].native.db(req.params.db);
86
87 // delete a collection
88 mongo_db.dropCollection(req.body.collection_name, function (err, coll){
89 if(err){
90 console.error('Error deleting collection: ' + err);
91 res.status(400).json({'msg': req.i18n.__('Error deleting collection') + ': ' + err});
92 }else{
93 res.status(200).json({'msg': req.i18n.__('Collection successfully deleted'), 'coll_name': req.body.collection_name});
94 }
95 });
96});
97
98// Exports a collection
99router.get('/collection/:conn/:db/:coll/export/:excludedID?', function (req, res, next){
100 var connection_list = req.app.locals.dbConnections;
101
102 // Check for existance of connection
103 if(connection_list[req.params.conn] === undefined){
104 common.render_error(res, req, req.i18n.__('Invalid connection name'), req.params.conn);
105 return;
106 }
107
108 // Validate database name
109 if(req.params.db.indexOf(' ') > -1){
110 common.render_error(res, req, req.i18n.__('Invalid database name'), req.params.conn);
111 return;
112 }
113
114 // exclude _id from export
115 var exportID = {};
116 if(req.params.excludedID === 'true'){
117 exportID = {'_id': 0};
118 }
119
120 // Get DB's form pool
121 var mongo_db = connection_list[req.params.conn].native.db(req.params.db);
122
123 mongo_db.collection(req.params.coll).find({}, exportID).toArray(function (err, data){
124 if(data !== ''){
125 res.set({'Content-Disposition': 'attachment; filename=' + req.params.coll + '.json'});
126 res.send(JSON.stringify(data, null, 2));
127 }else{
128 common.render_error(res, req, req.i18n.__('Export error: Collection not found'), req.params.conn);
129 }
130 });
131});
132
133// Create a new collection index
134router.post('/collection/:conn/:db/:coll/create_index', function (req, res, next){
135 var connection_list = req.app.locals.dbConnections;
136
137 // Check for existance of connection
138 if(connection_list[req.params.conn] === undefined){
139 res.status(400).json({'msg': req.i18n.__('Invalid connection')});
140 return;
141 }
142
143 // Validate database name
144 if(req.params.db.indexOf(' ') > -1){
145 res.status(400).json({'msg': req.i18n.__('Invalid database name')});
146 }
147
148 // Get DB form pool
149 var mongo_db = connection_list[req.params.conn].native.db(req.params.db);
150
151 // adding a new collection
152 var unique_bool = (req.body[1] === 'true');
153 var sparse_bool = (req.body[2] === 'true');
154 var options = {unique: unique_bool, background: true, sparse: sparse_bool};
155 mongo_db.collection(req.params.coll).createIndex(JSON.stringify(req.body[0]), options, function (err, index){
156 if(err){
157 console.error('Error creating index: ' + err);
158 res.status(400).json({'msg': req.i18n.__('Error creating Index') + ': ' + err});
159 }else{
160 res.status(200).json({'msg': req.i18n.__('Index successfully created')});
161 }
162 });
163});
164
165// Drops an existing collection index
166router.post('/collection/:conn/:db/:coll/drop_index', function (req, res, next){
167 var connection_list = req.app.locals.dbConnections;
168
169 // Check for existance of connection
170 if(connection_list[req.params.conn] === undefined){
171 res.status(400).json({'msg': req.i18n.__('Invalid connection')});
172 return;
173 }
174
175 // Validate database name
176 if(req.params.db.indexOf(' ') > -1){
177 res.status(400).json({'msg': req.i18n.__('Invalid database name')});
178 }
179
180 // Get DB form pool
181 var mongo_db = connection_list[req.params.conn].native.db(req.params.db);
182
183 // adding a new index
184 mongo_db.collection(req.params.coll).indexes(function (err, indexes){
185 mongo_db.collection(req.params.coll).dropIndex(indexes[req.body.index].name, function (err, index){
186 if(err){
187 console.error('Error dropping Index: ' + err);
188 res.status(400).json({'msg': req.i18n.__('Error dropping Index') + ': ' + err});
189 }else{
190 res.status(200).json({'msg': req.i18n.__('Index successfully dropped')});
191 }
192 });
193 });
194});
195
196module.exports = router;