Node.js REST API从MongoDB中获取数据

我正在尝试使用Node.js创build一个REST API,它将获取MongoDB集合的最后N行。 这是我现在的代码:

var express = require("express"); var app = express(); var bodyParser = require("body-parser"); var router = express.Router(); var mongodb = require("mongodb"); var MongoClient = require("mongodb").MongoClient; var db; app.use(bodyParser.json()); app.use(bodyParser.urlencoded({"extended" : false})); // Initialize connection once MongoClient.connect("mongodb://localhost:27017/sample", function(err, database) { if(err) return console.error(err); db = database; // the Mongo driver recommends starting the server here because most apps *should* fail to start if they have no DB. If yours is the exception, move the server startup elsewhere. }); // Reuse database object in request handlers router.get("/", function(req, res, next) { db.collection("samplecollection").find({}, function(err, docs) { if(err) return next(err); docs.each(function(err, doc) { if(doc) { console.log(doc); } else { res.end(); } }); }).limit(10,function(e,d){}); }); app.use('/',router); app.listen(3000); console.log("Listening to PORT 3000"); 

这成功地打印出服务器控制台上的数据库的所有内容(每当客户端发出获取请求时)。 但是,如何以高效的方式将此JSON信息发送给进行GET调用的客户端(并且支持客户端可以添加只能获取数据库最后N行的参数N的情况)。 我看着mongoose,这看起来很稳固,但在我的情况下,我已经有一个预先存在的数据库和集合,所以不知道这是否是这项任务的最佳途径。

如果您需要更多信息或澄清,请随时通知我! 谢谢阅读!

您可以使用res.send并将响应发送回前端,而不是res.end

 router.get("/", function(req, res, next) { db.collection("samplecollection").find({}, function(err, docs) { if(err) return next(err); docs.each(function(err, doc) { if(doc) { console.log(doc); var response = { statusCode: 200, headers: { 'Content-Type': 'application/json' }, body: JSON.parse(doc) } res.send(response); } }); }); }); 

要获取集合的最后N个logging,可以使用sortlimit的组合。 首先,按照升序/降序排列date等特定字段,然后将结果限制为N。 像这样的东西:

db.collection.find({query})。sort({key:1})。limit(N)

更新:

根据我们正在进行的评论对话,这里是我如何成功地将数据发送回客户端的一个例子。 这不包括限制或任何幻想。

 var express = require('express'); var app = express(); var port = process.env.PORT || 3000; var db = require('./config/db'); var bodyParser = require('body-parser'); app.use(express.static(__dirname + "/public")); app.use(bodyParser.json()); app.get('/', function(req, res) { db.find({}, function(err, data) { if (err) { console.log(err); return res.send(500, 'Something Went wrong with Retrieving data'); } else { // console.log(data[0]); res.json(data); } }); }); app.listen(port); console.log('Server listening on port: ', port); 

结束了我的问题。 把我的get语句改成这样:

 router.get("/", function(req, res, next) { db.collection("samplecollection", function(err, collection){ collection.find({}).limit(10).toArray(function(err, data){ res.json(data); }) }); });