我有一些代码使用了数据库: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);
好吧,我遇到的问题是,当我在邮递员中键入localhost:3000 / tasks时,它说它正在加载很长时间,然后又说它无法得到响应。我想要做的是将集合中的所有任务(JSON)列出到邮递员上。
我已经建立了MongoDB,也下载了所需的所有内容;猫鼬,nodemon,Mongodb等。
以及如何将其从节点应用程序上载到数据库集合。
答案 0 :(得分:3)
您的代码中的问题与syntax
有关。考虑以下代码(其中几个)
Task.find({}, function(err, task) {
if (err)
res.send(err);
return;
res.json(task);
});
在此代码块中,您的Task.find
将返回undefined
,并且从未到达res.json
。而且由于您的服务器没有发送任何响应,因此请求只是超时。
仅仅因为返回是缩进的 并不意味着它是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);
});