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, время: 23:57. |