【问题标题】:Mongoose not responding with data from MongoDBMongoose 没有响应来自 MongoDB 的数据
【发布时间】:2019-05-25 06:59:23
【问题描述】:

我有一些代码使用 database:AssignmentCollection:todolist 中的一些数据,它们应该与 MongoDB 交互并添加、删除或列出集合中的 JSON。

为了理解问题,我必须在解释之前显示代码。

这是模型的代码:

'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var TaskSchema = new Schema({
  id: {
    type: String,
    unique: true
  },
  desc: {
    type: String
  }
});

module.exports = mongoose.model('Task', TaskSchema);

这是控制器的代码:

'use strict';

var mongoose = require('mongoose'),

Task = mongoose.model('Task');

exports.list_all_tasks = function(req, res) {

  console.log("listing should commence");

  Task.find({}, function(err, task) {
    if (err)
      res.send(err);
      return;
    res.json(task);
  });

};

exports.create_a_task = function(req, res) {

  var new_task = new Task(req.body);
  new_task.save(function(err, task) {
    if (err)
      res.send(err);
      return;
    res.json(task);
  });

};

exports.delete_a_task = function(req, res) {

  Task.deleteOne({
    _id: req.params.taskId
  }, function(err, task) {
    if (err)
      res.send(err);
      return;
    res.json({n: task.n, ok: task.ok});

  });

};

这里是路线的代码:

'use strict';
module.exports = function(app) {
  var todoList = require('./controller');

  // todoList Routes
  app.route('/tasks')

    .get(todoList.list_all_tasks)
    
    .post(todoList.create_a_task);

  app.route('/tasks/:taskId')

    .delete(todoList.delete_a_task);

};

Server.js 文件:

const express = require('express');
const app = express();
const port = 3000;

var mongoose = require('mongoose');
Task = require('./api/model'); //created model loading here
bodyParser = require('body-parser');
mongoose.Promise = global.Promise;

const controller = require('./api/controller');

// mongoose instance connection url connection

//P.S The username and password have been taken off this security and privacy reasons
mongoose.connect('mongodb+srv://userName:password@server-4tjvi.mongodb.net/Assignment?retryWrites=true', { useNewUrlParser: true });

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var routes = require('./api/routes'); //importing route
routes(app); //register the route


app.listen(port);

console.log('Welcome to Just Do It, your Node.js application for all your To Do List needs.');
console.log('todo list API server has started on: port ' + port);

好的,我遇到的问题是,当我在 Postman 中输入 localhost:3000/tasks 时,它说它正在加载很长时间,然后它说它无法得到响应。我想要它做的是将集合中的所有任务(JSON)列出到邮递员上。

我已经设置了 MongoDB,我也下载了所有需要的东西; mongoose、nodemon、Mongodb等

以及如何将节点应用程序中的内容上传到数据库集合。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    代码中的问题在于syntax。考虑以下代码(其中几个)

    Task.find({}, function(err, task) {
      if (err)
        res.send(err);
        return;
      res.json(task);
    });
    

    在这段代码中,您的Task.find 将返回undefined,而res.json 永远不会到达。而且由于您的服务器没有发送任何响应,因此请求将超时。

    仅仅因为 return 是 缩进 并不意味着它是 if 块的一部分。要使其成为if 块的一部分,您必须将其放入braces {}

    这是一个插图:

    function test() {
      let out;
      if (true)
        out === 'yes';
        return; // <-- not part of if block
      console.log('never reached')
      return out; // <-- never reached
    }
    
    console.log(test())

    以上等价于:

    function test(x) {
      let out;
      if (true)
        out === 'yes';
      return; // return undefined
    }
    
    console.log(test())

    所以重构它:

    Task.find({}, function(err, task) {
      if (err) {
        res.send(err);
        return;
      }
      res.json(task);
    });
    

    returnres.send

    Task.find({}, function(err, task) {
      if (err)
        return res.send(err);
      res.json(task);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 2020-06-25
      相关资源
      最近更新 更多