Узел / Express - MongoDB: Ошибка: Route.get () требует функцию обратного вызова, но получил [объект Undefined] - PullRequest
0 голосов
/ 07 февраля 2020

Я пытался подключить свое приложение Node / express к MongoDB, но безуспешно. Ниже наиболее важная часть кода:

приложение. js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var cors = require('cors');

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

var mongoose = require('mongoose');
const bodyParser = require('body-parser');
const vesselController = require('./controllers/VesselController');
require('./config/keys');

var app = express();
app.use(cors());
app.options('*', cors());

// DB Config
const db = require('./config/keys').MongoURI;

const options = {
    useNewUrlParser: true,
    reconnectTries: Number.MAX_VALUE,
    poolSize: 10
};

mongoose
    .connect(db, options)
    .then(() => console.log('MongoDB Connection established'))
    .catch((err) => console.log('Error connecting MongoDB database due to: ', err));

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// Bodyparser
app.use(express.urlencoded({ extended: false }));

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

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

// catch 404 and forward to error handler
app.use(function(req, res, next) {
    next(createError(404));
});

app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    next();
});

// error handler
app.use(function(err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 500);
    res.render('error');
});

const PORT = process.env.PORT || 3000;

app.use(bodyParser.urlencoded({ extended: true, limit: '50mb' }));
app.use(bodyParser.json({ limit: '50mb' }));
app.use(cors());

app.route('/vessels/all').get(vesselController.getBaseAll);
app.route('vessels/:id/track').get(vesselController.getCurrent);
app.route('/vessels').get(vesselController.getHistory);

app.listen(PORT, console.log(`Server started on port ${PORT}`));

module.exports = app;

VesselController. js

const Vessels = require("../models/Vessels");
const Positions = require("../models/Positions");
const Compnanies = require("../models/Companies");

exports.getBaseAll = (req, res) => {
    Promise.all([
        Compnanies.find(),
        Vessels.find(),
        Positions.aggregate([
            {
                '$sort': {
                  'date': -1
                }
              }, {
                '$group': {
                  '_id': '$callsign', 
                  'details': {
                    '$push': '$$ROOT'
                  }
                }
              }, {
                '$replaceRoot': {
                  'newRoot': {
                    '$arrayElemAt': [
                      '$details', 0
                    ]
                  }
                }
              }
              ])
    ]).then(([companies, vessels, positions]) => {
        // apply vessels detail table as join:
        positions.forEach((pos) => {
            vessels.forEach((ves) => {
                if(pos.callsign == ves.callsign) {
                    p._detail = ves;
                }
            });
            companies.forEach((com) => {
                if(p._detail.company == com.number) {
                    p._detail = com;
                }
            });
        });
        res.status(200).json(positions);
    }).catch((err) => {
        return res.status(500).send(err);
    });
};


exports.getHistory = (req, res) => {
    var id = req.param.id;
    Positions.find({
        "callsign": id,
        "date": {
            $gte: new Date(Date.now() - (1000*60*60*24))
    }}, (err, task) => {
        if(err) {
            return res.status(500).send(err);
        }
        res.status(200).json(task);
    });
};

exports.getCurrent = (req, res) => {
    var currentPos = Positions.find({
        "date": {
            $gte: new Date(Date.now() - (1000*60*60))
    }});
    currentPos.exec((err, task) => {
        if(err) {
            return res.status(500).send(err);
        }
        res.status(200).json(task);
    });
};

Что я сделал, чтобы решить проблему:

Посты, с которыми я столкнулся и проанализировал, чтобы решить проблему, были:

1) Это было полезно , но у меня все еще есть проблема.

2) Также этот пост Я использовал, но проблема все еще остается.

3) Этот и этот источник тоже , но я все еще не могу подключиться к MongoDB.

Спасибо за указание в правильном направлении для решения этой проблемы.

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