Извлечение данных из млаб геройку - PullRequest
5 голосов
/ 12 марта 2019

Я следовал руководству, чтобы изучить приложение Express.js, которое выполняет основные операции CRUD из MongoDB.Все операции, созданные локально, работают нормально.В качестве следующего шага (не в учебнике) мне нужно было интегрировать mLab, предоставленный Heroku для MongoDB, чтобы отправить приложение в Heroku.

Теперь мне нужно внести необходимые изменения в соединение mongoose, поскольку я перехожу из локальной базы данных в mLab.Я внес необходимые изменения, но теперь приложение выдает ошибку.

complaintController.js (класс для получения запроса и использования модели)

Complaint = require('./complaintModel');
exports.index = function (req, res) {
Complaint.get(function (err, complaints) {      //GET function
    if (err) {
        res.json({
            status: "error",
            message: err,
        });
    }
    res.json({
        status: 200,
        message: "Complaints retrieved successfully",
        data: complaints
    });
});
};

complaintModel.js ( локальный MongoDB thisотлично работает )

var mongoose = require('mongoose');
var complaintSchema = mongoose.Schema({
name: {
    type: String,
    required: true
},
});


 // Export Complaint model

 var Complaint = module.exports = mongoose.model('complaint', complaintSchema);
 module.exports.get = function (callback, limit) {
     Complaint.find(callback).limit(limit);
 }

complaintModel.js ( ошибка подключения к mLab * )

var mongoDB = "MongoDB URI";

var connection = mongoose.createConnection(mongoDB,
{    
  User: 'username',
  Password: 'pass'
});

var Complaint;
connection.on('open', function() {
  console.log('connection established!!!');
  Complaint = module.exports = connection.model('master_complaint', complaintSchema);
  module.exports.get = function (callback, limit) {
    Complaint.find(callback).limit(limit);
  }
});

Здесь я получаю следующую ошибку, когда даюполучить запрос Я понял, что существует проблема экспорта модуля жалобы, но любые предложения или идеи будут полезны.

TypeError: Complaint.get is not a function
at exports.index (R:\Workings\PersWork\web\webpack-demo\controller\complaintController.js:6:15)
at Layer.handle [as handle_request] (R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\layer.js:95:5)
at next (R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\layer.js:95:5)
at R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\index.js:281:22
at Function.process_params (R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\index.js:335:12)
at next (R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\index.js:275:10)
at Function.handle (R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\index.js:174:3)
at router (R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\index.js:47:12)
at Layer.handle [as handle_request] (R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\index.js:317:13)
at R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\index.js:284:7
at Function.process_params (R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\index.js:335:12)
at next (R:\Workings\PersWork\web\webpack-demo\node_modules\express\lib\router\index.js:275:10)
at jsonParser (R:\Workings\PersWork\web\webpack-demo\node_modules\body-parser\lib\types\json.js:110:7)

1 Ответ

0 голосов
/ 16 марта 2019

Из того, что я вижу в коде. complaintController будет использоваться маршрутизатором express.js. Я прав?

Я также вижу в complaintModel.js , что экспортированная функция get требует 2 параметра, которые являются фильтром и ограничением. Но в файле Controller вы вообще не предоставляете эти аргументы.

Я сам еще не проверял это, но попробуйте изменить complaintModel.js на

var mongoose = require("mongoose");

var complaintSchema = mongoose.Schema({
  name: {
    type: String,
    required: true
  }
});

var Complaint = mongoose.model("master_complaint", complaintSchema);

// Exports the get function
module.exports.get = function(filter, limit, callback) {
  var mongoDB = "MongoDB URI";

  var connection = mongoose.createConnection(mongoDB, {
    User: "username",
    Password: "pass"
  });

  connection.on("open", function() {
    console.log("connection established!!!");

    Complaint.find(filter)
      .limit(limit)
      .exec()
      .then(results => {
          callback(undefined, results)
      })
      .catch(err => {
          console.log(err);
          callback("ERROR: Can't query the collection", undefined)
      });
  });
};

И измените complaintController.js на следующий

var Complaint = require("./complaintModel");

module.exports.index = function(req, res) {
  var params = req.query;
  const filter = params.filter;
  const limit = params.limit;

  Complaint.get(
    filter,
    limit,
    (err,
    complaints => {
      if (err) {
        res.json({
          status: "error",
          message: err
        });
      } else {
        res.json({
          status: 200,
          message: "Complaints retrieved successfully",
          data: complaints
        });
      }
    })
  );
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...