gpt4 book ai didi

node.js - 从 mongoose 数据库获取模型

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:18 24 4
gpt4 key购买 nike

我目前正在考虑构建一个基于 REST 的小型服务,我可以将一些数据POST到 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 的操作都是异步的。

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 );
}
});
}

关于node.js - 从 mongoose 数据库获取模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20679929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com