Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.11.2019, 17:53
Новичок на форуме
Отправить личное сообщение для mitirrol Посмотреть профиль Найти все сообщения от mitirrol
 
Регистрация: 19.11.2019
Сообщений: 2

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);
                });
      });
Ответить с цитированием
  #2 (permalink)  
Старый 19.11.2019, 18:48
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

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);
      });
    });
  });
});

Последний раз редактировалось Audaxviator, 19.11.2019 в 19:19.
Ответить с цитированием
  #3 (permalink)  
Старый 19.11.2019, 21:41
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Ладно, в общем, расскажу кое-чего за эту тему. А чем ещё заняться безработному предпенсионеру?

Короче так. С тех пор, как появился пресловутый 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(...

Извените за внимание.

Последний раз редактировалось Audaxviator, 19.11.2019 в 21:49.
Ответить с цитированием
  #4 (permalink)  
Старый 20.11.2019, 15:06
Новичок на форуме
Отправить личное сообщение для mitirrol Посмотреть профиль Найти все сообщения от mitirrol
 
Регистрация: 19.11.2019
Сообщений: 2

Сообщение от Audaxviator Посмотреть сообщение
Ладно, в общем, расскажу кое-чего за эту тему. А чем ещё заняться безработному предпенсионеру?

Короче так. С тех пор, как появился пресловутый express.Router(), все уж и забыли, во-перввых, как просто делаются роутеры, и во-вторых, как работать с нативным драйвером mongodb.
Тут дело в чём? Вот к примеру, для Go кто-то написал, наконец-то, пакет context - и наступило счастье: там теперь появился сносный фреймвёрк go-chi/chi, сильно похожий (ну, насколько возможно) на ruby-rails или Express, появился пакет go-socket.io, прям юзающий стандартный модуль socket.io.js на клиенте, - в общем, кое-что появилось.

Но в Експрессе-то этот самый "контекст" был всегда. Только назывался он - app.locals.
Понятно, что коннект к базе - "дорогая" операция, поэтому мы хочим поключиться, держать открытым соединение и не парить...
Но это все не поясняет суть проблемы - почему я вижу наличие записей в свой базе через GET, но не могу посмотреть в оболочке mongo?
Куда они пишутся? Как со стороны сервера увидеть наполнение базы?)
Ответить с цитированием
  #5 (permalink)  
Старый 20.11.2019, 16:02
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Это чудо!!!
Можно попробовать писать в терминале правильные команды (вот тут есть).
Заходишь в папку с бинарниками, и первая команда
mongo
вторая
show dbs
третья
use <имя базы из имеющегося списка>
следующая
db.getCollectionNames()
и т.д.
Я всегда так делаю.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с базой данных через javascript KupueIIIKo Общие вопросы Javascript 24 26.07.2015 18:05
РАБОТА С ОБЪЕКТАМИ ПОЛУЧЕННЫМИ ЧЕРЕЗ get() Brook jQuery 4 16.02.2013 19:21
Автоматическая работа script в подгруженном через AJAX div'e rost Javascript под браузер 4 06.07.2012 21:24
Удаленная работа на сайте через html страницу Sanches Общие вопросы Javascript 19 11.08.2009 13:21
Работа с окнами через opener. Нид хелп RAUS Events/DOM/Window 1 29.07.2009 19:59