@aleshaykovlev
html, css, js, node, webpack, sass, react

Ошибка при нажатии на кнопку зарегистрироваться, что делать?

Запускаю серв, захожу на страницу sign up нажимаю зарегистрироваться и выдает ошибка - TypeError: db.collection is not a function
server:
'use strict';

let bodyParser = require('body-parser');
let express = require('express');
let MongoClient = require('mongodb').MongoClient;
let ObjectID = require('mongodb').ObjectID;

let app = express();
let db;

let parser = bodyParser.urlencoded({ extended: false });
app.use('/public', express.static('public'));
app.set('view engine', 'ejs');

// Регистрация
app.get('/sign-up', function(req, res) {
    res.render('signup');
});
// Получение данных 
app.post('/sign-up', parser, function(req, res) {
    let user = {
        name: req.body.name
    }
    res.render('exit', {data: req.body});

    // Обращение к коллекции users
    db.collection('users').insert(user, function(err, result) {
        if (err) {
            console.log(err);
            return res.sendStatus(500);
        }
        res.send(user);
    });
});
// Профиль
app.get('/profile', function(req, res) {
    res.render('profile');
    db.collection('users').find().toArray(function(err, docs) {
        if (err) {
            console.log(err);
            return res.sendStatus(500);
        }
        res.send(docs);
    });
});
// Нахождение пользователей через id
app.get('/profile/:id', function(req, res) {
    db.collection('users').findOne({ _id: ObjectID(req.params.id) }, function(err, doc) {
        if (err) {
            console.log(err);
            return res.sendStatus(500);
        }
        res.send(doc);
    });
});
// Запуск сервера
MongoClient.connect('mongodb://localhost:27017/alldatabase', function(err, database) {
    useUnifiedTopology: true;
    useNewUrlParser: true;

    if (err) {
        return console.log(err);
    }
    // Ссылка на бд
    db = database;
    app.listen(3000, function() {
        console.log('Подключение');
    });
});
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
@Che603000
c 2011 javascript
https://mongodb.github.io/node-mongodb-native/api-...
форматconnect(url[, options], callback)
Видимо ошибка в MongoClient.connect
// Запуск сервера
MongoClient.connect('mongodb://localhost:27017/alldatabase', function(err, database) {
    useUnifiedTopology: true;  //  <---????
    useNewUrlParser: true;  //  <---???? неправильно опции установлены

   ...

Правильно ниже
// Запуск сервера
MongoClient.connect(
  'mongodb://localhost:27017/alldatabase',  // строка подключения
  {
     useUnifiedTopology: true,  // установка опций
     useNewUrlParser: true
  },
  function(err, database) {  // callback
    if (err) {
        return console.log(err);
    }
    // Ссылка на бд
    db = database;
    app.listen(3000, function() {
        console.log('Подключение');
    });
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@emp1re
Потому что db = undefined.

Вам нужно подождать вызов callback перед регистрацией методов пустого Об'єкта.

Иницилизация базы данных должно происходить до регестрации роутера.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы