从mongoose数据库获取模型

我目前正在考虑build立一个小的基于REST的服务,我可以将一些数据发布到一个mongoose数据库并GET数据。

这是我的main.js文件:

 var http = require("http"); var DAO = require("./DAO"); var express = require("express"); var util = require('util'); var app = express(); app.use(express.bodyParser()); app.post('/postIsles',function(req,res){ DAO[req.method](req.body); res.send("body" + req.body.name); }); app.get('/getIsles',function(req,res){ var isleVar = DAO[req.method](req); res.send(isleVar); }); app.listen("3000"); console.log("\nApp available at http://127.0.0.1:3000\n"); 

和DAO.js:

 var mongoose = require('mongoose'); //Connect to database mongoose.connect( 'mongodb://127.0.0.1:27017/library_database' ); //Schemas var Isle = new mongoose.Schema({ name: String, description: String, lastStocked: Date }); //Models var IsleModel = mongoose.model( 'Isle', Isle ); function POST(request) { var name = request.name; var description = request.description; var lastStocked = request.lastStocked; console.log("POST REQ +" + request); var isle = new IsleModel({ name: name, description: description, lastStocked: lastStocked }); isle.save( function( err ) { if( !err ) { return console.log( 'created' ); } else { return console.log( err ); } }); } function GET(request) { return IsleModel.find( function( err, islesT ) { if( !err ) { console.log("isles :"+islesT); return islesT; } else { return console.log( err ); } }); } exports.POST = POST; exports.GET = GET; 

当我尝试运行GET ,出现以下错误:

 TypeError: Converting circular structure to JSON at Object.stringify (native) 

我有点不确定如何克服这一点。

请记住使用Node.js时:任何涉及IO的操作都将是asynchronous的。

Model#find是一个asynchronous方法,所以isleVar没有设置为你所期望的结果。 你的结果只能在你传递给IsleModel.find的匿名函数中使用

要修复您的GET方法,您需要修改代码以考虑数据库请求的asynchronous性,只有在应用程序有机会检索数据时才发送响应。

下面是修复/getIsles的一个可能的解决scheme的例子:

在main.js中,修改你的get路由来传递res(所以可以asynchronous处理)

 app.get('/getIsles',function(req,res){ return DAO[req.method](req, res); }); 

在DAO.js中,有回应将你的callback内的数据发送给IsleModel.find

 function GET(request, response) { IsleModel.find( function( err, islesT ) { if( !err ) { console.log("isles :"+islesT); response.send(islesT); } else { return console.log( err ); } }); }