Hej,有问题。尝试使用Mongo数据发送Express响应。
这是我的Express服务器的代码
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/todo-app');
var TaskSchema = mongoose.Schema({
name: String,
assignee: String
},{ collection : 'task' });
var Task = module.exports = mongoose.model('Task', TaskSchema);
module.exports.createTask = function (newTask, callback) {
newTask.save(callback);
}
module.exports.getAllTasks = function(){
Task.find().lean().exec(function (err, docs) {
console.log(docs); // returns json
});
}
这是单独文件中的猫鼬模型
public void insertQ(SinglyLinkedListNode Q){
if (prev.next.next == curr){
prev.next = Q;
Q.next = curr;
}
return;
}
如何从getAllTasks函数正确发送数据?
答案 0 :(得分:1)
我相信您需要做的是return
getAllTasks
函数中的文档,但也许是使用回调函数异步执行此操作的更好方法:
module.exports.getAllTasks = function(callback){
Task.find().lean().exec(function (err, docs) {
// If there is an error, return the error and no results
if(err) return callback(err, null)
// No error, return the docs
callback(null, docs)
});
}
然后在你的路线中你会做:
app.get('/get-all-tasks',function(req,res){
Task.getAllTasks(err, docs){
if(err) return res.json(error: err)
res.json(msg: docs);
}
});
我不确定getAllTasks
是否应该是mongoose static,在这种情况下,您的模型会看起来像这样:
TaskSchema.statics.getAllTasks = function (callback) {
return this.find().lean().exec(callback);
}
答案 1 :(得分:1)
这看起来是正确的,但你忘记了Javascript的异步行为:)。当你编码时:
module Flattener
def deep_flatten
flatten.map do |item|
case item
when Hash, Array
item.deep_flatten
else
item
end
end.flatten
end
end
class Hash
include Flattener
end
class Array
include Flattener
end
您可以看到json响应,因为您在回调中使用module.exports.getAllTasks = function(){
Task.find().lean().exec(function (err, docs) {
console.log(docs); // returns json
});
}
指令(您传递给.exec()的匿名函数)
但是,当您键入:
console.log
app.get('/get-all-tasks',function(req,res){
res.setHeader('Content-Type', 'application/json');
console.log(Task.getAllTasks()); //<-- You won't see any data returned
res.json({msg:"Hej, this is a test"}); // returns object
});
将执行不返回任何内容的Console.log
函数(未定义),因为真正返回所需数据的内容是INSIDE回调...
所以,为了让它起作用,你需要这样的东西:
getAllTasks()
我们可以写:
module.exports.getAllTasks = function(callback){ // we will pass a function :)
Task.find().lean().exec(function (err, docs) {
console.log(docs); // returns json
callback(docs); // <-- call the function passed as parameter
});
}