mongodb работа с базой через node и напрямую
Всем привет!
Вникаю в node.js и mongodb. 1. Поднял на Ubuntu Server 18.04: node.js, express, mongodb. 2. Создал базу test_base и коллекцию rates в ней. 3. Настроил маршруты для get/post/delete Через POST передаю документ, проверяю через GET - добавился, все вроде ОК, ноооо... Открываю на сервере mongo --shell, проверяю в той же коллекции той же базы - пусто. Пишу через post в новую коллекцию, проверяю GET-ом - запись есть в новой коллекции, а в mongo --shell коллекция новая не появилась. Подскажите, как посмотреть наполнение базы на сервере и почему я не вижу наполнения в mongo --shell? Чувствую что ответ лежит на поверхности и я просто где-то не вник, но уже три дня не могу понять куда смотреть и как найти решение( Содержимое server.js: const express = require('express'); const MongoClient = require('mongodb').MongoClient; const bodyParser = require('body-parser'); const app = express(); const port = 8000; var db; MongoClient.connect('mongodb://localhost:27017/',function(err, database){ if(err) { return console.log(err); } db=database.db('test_base'); app.listen(3012,function(){ console.log('api app started') }); }); app.use(bodyParser.urlencoded({extended : true})); app.listen(port, () =>{ console.log('We are live on port '+port); }); app.get('/', function(req, res){ res.sendfile('/media/share/index.html'); }); app.get('/rates', function(req, res){ res.sendfile('/media/share/rates.csv'); }); app.post('/rates_post', (req, res) => { var rate={ name:req.body.name, billing_name:req.body.bilname, cost:req.body.cost }; db.collection('crowd').insertOne(rate, function(err, resault){ if(err) { console.log(err); return res.sendStatus(500); } res.send(resault); }); }); app.get('/base', function(req, res){ db.collection('rates').find().toArray(function(err, docs){ if(err) { console.log(err); return res.sendStatus(500); } res.send(docs); }) }); app.post('/parse', (req, res) => { var rate={ name:req.body.name, bilname:req.body.bilname, cost:req.body.cost, service:req.body.service, technology:req.body.technology, sity:req.body.city, service_package:req.body.service_package, }; db.collection('rates').insertOne(rate, function(err, resault){ if(err) { console.log(err); return res.sendStatus(500); } res.send(resault); }); }); app.delete('/del_all', (req, res) => { db.collection('rates').deleteMany({}, function(err, resault){ if(err) { console.log(err); return res.sendStatus(500); } res.send(resault); }); }); |
app.post('/rates_post', function(req, res) { var rate={ name: req.body.name, billing_name: req.body.bilname, cost: req.body.cost }; MongoClient.connect('mongodb://localhost:27017/', function(err, client) { if(err) console.log(err); var coll = client.db('test_base').collection('crowd'); coll.insertOne(rate, function(){ coll.findOne({name: rate.name}, function(err, doc) { if(err) console.log(err); client.close(); res.json(doc); }); }); }); }); |
Ладно, в общем, расскажу кое-чего за эту тему. А чем ещё заняться безработному предпенсионеру?
Короче так. С тех пор, как появился пресловутый express.Router(), все уж и забыли, во-перввых, как просто делаются роутеры, и во-вторых, как работать с нативным драйвером mongodb. Тут дело в чём? Вот к примеру, для Go кто-то написал, наконец-то, пакет context - и наступило счастье: там теперь появился сносный фреймвёрк go-chi/chi, сильно похожий (ну, насколько возможно) на ruby-rails или Express, появился пакет go-socket.io, прям юзающий стандартный модуль socket.io.js на клиенте, - в общем, кое-что появилось. Но в Експрессе-то этот самый "контекст" был всегда. Только назывался он - app.locals. Понятно, что коннект к базе - "дорогая" операция, поэтому мы хочим поключиться, держать открытым соединение и не париться. Делалось это так: ... ... ... var MongoClient = require('mongodb').MongoClient; ... app.get... app.post... app... app... ... MongoClient.connect('mongodb://localhost:27017/', function(err, client) { if(err) console.log(err); app.locals.db = client.db('anybase'); app.listen(3000, function() { console.log('3000'); }); }); И вуаля! Теперь все обработчики начинаются с магической строчки var clientDB = app.locals.db; clientDB.collection('blabla').find(... Извените за внимание. |
Цитата:
Куда они пишутся? Как со стороны сервера увидеть наполнение базы?) |
Это чудо!!!
Можно попробовать писать в терминале правильные команды (вот тут есть). Заходишь в папку с бинарниками, и первая команда mongo вторая show dbs третья use <имя базы из имеющегося списка> следующая db.getCollectionNames() и т.д. Я всегда так делаю. |
Часовой пояс GMT +3, время: 19:39. |