无法从猫鼬model.find()查询获得响应

时间:2020-06-07 20:06:38

标签: node.js mongodb mongoose promise

我正在尝试使用模型和架构从mongo数据库中获取所有记录。我能够连接到数据库。而且当我运行查询时,我没有任何响应。

routes.js

import express from 'express';
var router = express.Router();
import mongoose from 'mongoose';
const db = 'mongodb://localhost:27017/dbname';
import {contacts} from '../models/model.js';

// exports this js file
export { router }

//connect to mongodb

mongoose.createConnection(db, { useNewUrlParser: true , useUnifiedTopology: true }, (err, res) => {
       if(err) {
           console.error("Error: "+ err);
       }
       else {
           console.log('connected to mongodb');
       }
})


router.get('/check', (req, res)=> {
    res.send('in roues');
});

// mongo数据库调用

router.get('/contacts', (req, res) => {
    console.log('getting contacts');
   let promise = contacts.find({}).exec();
   console.log(promise);
   promise.then(function(err, contacts) {
       console.log('in func');
       if(contacts) {
           console.log('data received');
           console.log(contacts);
           res.send('data received');
       }
       else {
           console.log('doc not found');
       }
   })
})

model.js

    import mongoose from 'mongoose';
    const schema = mongoose.Schema;

    const contactSchema = new schema({
            name: String,
            details: [
                {
                    text: String,
                    icon: String
                }
            ]
        });

    let contacts = mongoose.model('contacts', contactSchema);

export {contacts}

控制台输出: (节点:27440)实验警告:ESM模块加载程序是实验性的。 服务器启动 连接到mongodb 取得联系 承诺{}

3 个答案:

答案 0 :(得分:2)

这可能是导致未捕获错误的原因。使用然后捕获尝试异步捕获。

 warning: comparison between pointer and integer
 39 |         if (newline == NULL)

我使用过es6箭头功能。 您还可以通过异步等待来尝试捕获

  router.get('/contacts', (req, res) => {
  console.log('getting contacts');
  contacts.find({})
    .then(contacts=> {
      console.log(contacts)
    })
    .catch(error=>{
     console.log(error.mmessage)
    }

答案 1 :(得分:0)

答案 2 :(得分:0)

.then(...)仅采用一个参数,即已解析的响应。

所以代替 promise.then(function(err,contact){...});采用 promise.then(function(contacts {...});