Проблема для обработки mongoDB с помощью nodejs (с использованием экспресса и руля) - PullRequest
0 голосов
/ 05 сентября 2018

Дано:

/ маршруты / index.js

var express = require('express');
var router = express.Router();
//var mongo = require('mongodb').MongoClient;
//var objectId = require('mongodb').ObjectID;
var mongo = require('mongodb');

var assert = require('assert');

var url = 'mongodb://localhost:27017/test';

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index');
});

router.post('/insert', function(req, res, next) {
  var item = {
    title: req.body.title,
    content: req.body.content,
    author: req.body.author
  };

  mongo.connect(url, function(err, db) {
    assert.equal(null, err);
    db.collection('userdata').insertOne(item, function(err, result) {
      assert.equal(null, err);
      console.log('Item inserted');
      db.close();
    });
  });

  res.redirect('/');
});

app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var hbs = require('express-handlebars');
var expressValidator = require('express-validator');
var expressSession = require('express-session');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.engine('hbs', hbs({extname: 'hbs', defaultLayout: 'layout', layoutsDir: __dirname + '/views/layouts/'}));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());

app.use(express.static(path.join(__dirname, 'public'))); eingetragen)
app.use(expressValidator());
app.use(express.static(path.join(__dirname, 'public')));

app.use(expressSession({secret: "eefa56_50cacb_34634f", saveUninitialized: false, resave: false})); // dafault storage is RAM, otherwise kann ich in der API von express-session rumwühlen, da der storage serverseitig in einer DB erfolgt

app.use('/', indexRouter);
app.use('/users', usersRouter);
...

package.json

{
  "name": "sample_express_app(POST_GET_handlebars)",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "assert": "^1.4.1",
    "body-parser": "^1.18.3",
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.9",
    "express": "~4.16.0",
    "express-handlenter": "^3.0.0",
    "express-session": "^1.15.6",
    "express-validator": "^5.3.0",
    "http-errors": "~1.6.2",
    "mongodb": "^3.1.4",
    "morgan": "~1.9.0"
  }
}

Сервер mongoDB работает, и нет никаких проблем для манипулирования базой данных в CMD. Особенно это касается router.post('/insert' ... в / route / index.js . Что-то не так (но может и в другой момент).

Я также попробовал это с этим (либо я получаю ошибку db.collection('userdata').insert(... -> 'db.collection не является функцией' или db.userdata.insert(... -> 'не может прочитать свойство вставить '):

1)
    db.runCommand({
          insert: "userdata",
          documents: [ item ]
       }
    )
2)
    db.collection('userdata').insertOne(item, function(err, result) {
      assert.equal(null, err);
      console.log('Item inserted');
      db.close();
    });
3)
    db.userdata.insert(item, function(err, result) {
      assert.equal(null, err);
      console.log('Item inserted');
      db.close();
    });

1 Ответ

0 голосов
/ 05 сентября 2018

Родной драйвер mongoDB работает с помощью MongoClient.

Внести изменения в файл index.js

var mongo = require('mongodb').MongoClient; var url = 'mongodb://localhost:27017';

mongo.connect(url, function(err, client) {
  const db = client.db(dbName);
  //your db queries
}) 

см. mongodb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...