如何在nodejs app中输出mongodb集合以获取它们作为响应

时间:2015-07-29 13:32:40

标签: node.js mongodb cloud9-ide

我正在使用Cloude 9环境开发我的nodejs应用程序。在那里我编写了连接到mongodb数据库的代码。我成功连接到数据库并将记录添加到集合中。

现在我想发送收集信息作为回报。但使用0无效。

让我知道我应该如何实现这个

以下是我的server.js文件的代码

res.send(collectionInfo);

根据@Roman Sachenko的回答,我试过用 var Db = require('mongodb').Db; var http = require('http'); var path = require('path'); var async = require('async'); var socketio = require('socket.io'); var express = require('express'); var ejs = require('ejs'); var app = express(); var helpers = require('express-helpers') var MongoClient = require('mongodb').MongoClient; var Server = require('mongodb').Server; var db; helpers(app); var bodyParser = require('body-parser'); app.use(bodyParser.json()); // for parsing application/json app.use(bodyParser.urlencoded({extended: true})); // for parsing application/x-www-form-urlencoded var server = http.Server(app); server.listen(process.env.PORT || 3000, process.env.IP || "0.0.0.0", function () { var addr = server.address(); console.log("Chat server listening at", addr.address + ":" + addr.port); }); app.use(express.static(__dirname + '/public')); app.set('views', __dirname + '/public/views'); app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); //app.use(express.static(__dirname + '/client')); app.use(express.static(path.join(__dirname, '/client'))); // MongoDB Connection app.use(function(req, res, next) { next(); }) app.get('/monogdb', function (req, res) { res.render('monogdb.ejs'); }); app.post('/ajax-mongo-connect', function (req, res) { var mongoClient = new MongoClient(new Server('localhost', 27017)); mongoClient.open(function(err, mongoClient) { if(err){ console.log(err); }else{ var db = mongoClient.db("mydb"); db.createCollection("students", { name : req.body.nm, description : req.body.desc, location : req.body.loc } ); console.log('database connected',db); var collectionInfo = db.collection("students"); mongoClient.close(); //res.setHeader('Content-Type', 'application/json'); res.send(collectionInfo); } }) }) 但它提供了以下错误

res.send(collectionInfo.toJSON());

并使用/home/ubuntu/workspace/node_modules/mongodb/lib/mongodb/db.js:299 throw err; ^ TypeError: Object #<Collection> has no method 'toJSON' at /home/ubuntu/workspace/server.js:66:41 at MongoClient.open (/home/ubuntu/workspace/node_modules/mongodb/lib/mongodb/mongo_client.js:103:5) at Db.open (/home/ubuntu/workspace/node_modules/mongodb/lib/mongodb/db.js:296:11) at process._tickCallback (node.js:442:13) 会出错

res.send({data: collectionInfo});

3 个答案:

答案 0 :(得分:1)

尝试返回此内容:res.status(200).json({'myCollection' : collectionInfo});

您可以找到有关快速回复here

的更多详情

<强>更新

在解释详细信息后,请查看以下代码:

app.post('/ajax-mongo-connect', function (req, res) {
    var mongoClient = new MongoClient(new Server('localhost', 27017));
    mongoClient.open(function(err, mongoClient) {
        if(err){
            console.log(err);
            res.status(500).json({message : 'OMG, an error occurred'});
        }else{
            var db = mongoClient.db("mydb");
            db.createCollection("students", { name : req.body.nm, description : req.body.desc, location : req.body.loc } );
            console.log('database connected',db);
            var collectionInfo = db.collection("students");
            // Here we will find all students
            collectionInfo.find({}).toArray(function(err, students) {
               // so now, we can return all students to the screen.
               res.status(200).json({'myCollection' : students});
            }
        }
    })
})

干杯!

答案 1 :(得分:0)

猫鼬ODM

首先,我建议您使用Mongoose ODM: https://github.com/Automattic/mongoose

因此,您可以更轻松地使用数据库。

基本上它返回(Mongoose)普通对象作为结果,但如果出现问题,您可以尝试使用toObject()toJSON()或者如上所述创建自己的对象,如{data: mongoCollection}

示例:

res.send(collectionInfo.toObject());
res.send(collectionInfo.toJSON());
res.send({data: collectionInfo});

如有疑问,请参阅链接:

http://mongoosejs.com/docs/guide.html#toJSON

原生驱动程序

对于本机驱动程序,它也应返回正常构造的对象,但根据我过去遇到的问题,如果手动设置标题,JSON.stringify总是有帮助。

您还可以查看实体的内容。所以你可以按console.log(collectionInfo);

输出它

然后确保内部有正确的对象。 根据结果​​,您可以采取以下行动:

  • res.send(JSON.stringify(collectionInfo)) //set headers manually
  • res.json(JSON.stringify(collectionInfo)) //you don't need to set headers

至少你会知道collectionInfo里面到底是什么。我认为调查这个问题就足够了。

答案 2 :(得分:0)

您可以通过在node.js中执行此操作来查看循环JSON对象:

 const util = require('util') // Native node module

 util.inspect(circularObj)

您可以从代码中的任何位置调用它,因此它非常通用。