在mongoose和node中使用find获取数据

时间:2018-03-28 11:06:58

标签: javascript node.js mongoose find

我在mongodb中从db返回一些数据时遇到问题。我让你陷入困境。

我有一个名为 db.js 的文件,其中包含以下内容:

const mongoose = require('mongoose');

var libro = mongoose.Schema({
        titulo: String,
        estado: String,
        autor: String,
        genero: String
});

module.exports = mongoose.model('estanteria', libro);

我有另一个名为 estanteria.js 的文件,其中包含以下内容:

const Libreria = require('./db');
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/libreria', (err) => {
    if(err) throw err;

    console.log("Conexión a db correcta");
});

...

function allBooks(){
    var libros = Libreria.find({}) 

    return libros;
}

exports.allBooks = allBooks;

我在函数 allBooks()中遇到的问题,我不知道如何在对象数组中返回集合的内容,然后在Web上显示它。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:0)

在allBooks函数内添加一个回调函数,在查找操作后返回。

function allBooks(){
    Libreria.find({}).exec(function(error, records) {
        if (!error) {
            res.send({
                success : true,
                records : records
            });
        } else {
            console.log(error);
            res.send({
                success : false,
                error : error
            });
        } 
});
}

exports.allBooks = allBooks;

答案 1 :(得分:0)

Libreria.find({})是一个异步操作,你需要使用Promises方式来处理这个问题。如下图所示:

Libreria.find返回一个promise,你可以在.then方法中处理这个promise的解析状态,如果发生任何错误,它将在.catch中完成

    function allBooks(){    
        Libreria.find({}) 
           .then(function(books) {
              return books;
           })
           .catch(function(error){
              return error;
           })
    }

    // An exmaple router handler as follow:
     router.get("/posts", function(req, res){
       allBooks()
         .then(function(records){
           res.json({status: true, records})
         })
        .catch(function(error){
           res.json({status: false, error })
         });
     })
  

了解有关mongoose promises的更多信息:http://mongoosejs.com/docs/promises.html

     

一般承诺:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

答案 2 :(得分:0)

使用JSON.stringify()以jhson格式对libros进行编码,然后将其写为对请求的响应(服务器收到的请求)