javascript - Mongoose 没有响应来自 MongoDB 的数据
问题描述
我有一些代码使用数据库中的一些数据:Assignment和Collection: 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,我也下载了所有需要的东西;猫鼬、nodemon、Mongodb 等。
以及如何将我的节点应用程序中的内容上传到数据库集合。
解决方案
您的代码中的问题在于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);
});
或者return
res.send
Task.find({}, function(err, task) {
if (err)
return res.send(err);
res.json(task);
});
推荐阅读
- sql - 将列表中的值添加到每个唯一 ID 代码 [SQL]
- authentication - 使用 MSXML2.XMLHTTP.6.0 登录网站
- php - 使用 laravel 和 ajax 显示表单验证错误
- javascript - 我对 js 代码 querySelectorAll 有问题
- python-3.x - 在 Python Bagging Classifier 中将最佳网格搜索超参数分配给最终模型
- python - 有没有一种简单的方法可以从 python 中的两个不相等的数组构造一个 n × n 数组?
- reactjs - 卸载组件时无法执行“removeChild”
- php - Webpack 找不到 php 文件
- python - 如何根据 Python 中的输入找出自定义日期(具有日历格式)?
- javascript - this.$scope 在控制器的 $postLink() 中为空