Не удается подключиться и запросить базу данных mLab с помощью mongojs

#node.js #mongodb #mongojs

#node.js #mongodb #mongojs

Вопрос:

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

server.js

 var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');

var index = require('./routes/index');
var tasks = require('./routes/tasks');
var port = 8081;
var app = express();

// View Engine

app.set('views',path.join(__dirname,'views'));
app.set('view engine','ejs');
app.engine('html',require('ejs').renderFile);

// Set Static Folder

app.use(express.static(path.join(__dirname,'client')));

// Body parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended : false}));
app.use('/',index);
app.use('/api',tasks);
app.listen(port,function(){

console.log('Server started at port : '   port);
});
  

и мой файл задач

tasks.js

 var express = require('express');
var router = express.Router();

var mongojs = require('mongojs');
var db = mongojs('mongodb://user:pass@ds063186.mlab.com:63186/mytaskslist_ahsan',['tasks']);

router.get('/tasks',function(req,res,next){
db.tasks.find(function(tasks,err){
if(!err) res.json(tasks);
});
});

module.exports = router;
  

Но когда я пытаюсь / api / tasks с помощью Postman, ответа не возвращается. Он продолжает загружаться некоторое время, а затем сообщает «Не удалось получить никакого ответа».
Я также пробовал консоль.зарегистрируйте мою db переменную, и она покажет пустой объект, который означает, что он не подключается к базе данных.

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

Ответ №1:

Couldn't get any response говорит, что вы не отвечаете на запрос. Если есть ошибка, вы не отправляете и не регистрируете ее. Верните ошибку с помощью next и запишите ее в регистраторе ошибок.

 db.tasks.find(function(tasks, err){
  if(err) {
    return next(err)
  }
  res.json(tasks);
});
  

И до app.listen

 app.use((err, req, res, next) => {
  console.log(err.stack || err.message);
  if (res.headersSent)
    return next(err)
  res.status(500).send('Internal Server Error')
})
  

Если вам нужна дополнительная помощь, отправьте сообщение об ошибке

Комментарии:

1. что он выводит после реализации выше Internal Server Error , но я не вижу никакой ошибки в своем коде

2. Мы возвращаем это как сообщение об ошибке к http-запросу. Реальное сообщение об ошибке находится в консоли. Что вы не раскрываете конфиденциальную информацию

3. я думаю, что это не чувствительно :-), это просто undefined

4. но это может быть чувствительно. неопределенный очень помогает. На самом деле ошибки нет, но аргументы приведены в неправильном порядке. Сначала err затем tasks

5. действительно, я имею в виду, действительно!!!!! . невероятно, что я пропустил эти мелочи, спасибо, чувак!!!! это работает