我目前正在研究构建一个基于REST的小型服务,我可以将POST
一些数据GET
转换为mongoose db并将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");
数据反馈回来。
这是我的main.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;
和DAO.js:
GET
当我尝试运行TypeError: Converting circular structure to JSON
at Object.stringify (native)
时,出现以下错误:
{{1}}
我有点不确定如何克服这个问题。
答案 0 :(得分:1)
请记住使用Node.js时:涉及IO的任何操作都将是异步的。
Model#find是一种异步方法,因此isleVar
未设置为您期望的结果。您的结果只能在传递给IsleModel.find
要修复您的GET方法,您需要修改代码以考虑数据库请求的异步性,并且只有在您的应用有机会检索数据后才会发送响应。
下面是修复/getIsles
的一种可能解决方案的示例:
在main.js中,修改你的get路由以传入res(所以它可以异步处理)
app.get('/getIsles',function(req,res){
return DAO[req.method](req, res);
});
在DAO.js中,让响应将回调内的数据发送到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 );
}
});
}