猫鼬不解决回调查询?

时间:2020-08-21 00:20:00

标签: node.js mongodb express mongoose

我从事此项目已有2年了,我认为这是由最近的更新引起的,但是我想知道是否有任何类型的,智能的,猫鼬/ NoSQL DBA ,灵魂将竭尽所能帮助我追踪和/或解决此问题。

因此,如您在下面看到的那样,这是一个简单的猫鼬查找查询,可以直接传递给MongoDB。就高层而言,这是显而易见的,对于大多数开发人员而言,交互是自然的,就像使用Mongoose的任何Mongo,Express,Node Stack一样。

问题是,当我发送此查询时,无论环境(生产项目)如何,它都无法解决。

“数据”似乎在某处丢失,因此查询根本无法解决。

这是一个简单的设置,实际上是一个测试端点,因此请提供帮助,贯穿进行并发送一些反馈。

非常感谢!

Model.js

const mongoose = require('mongoose');
const mongoosePaginate = require('mongoose-paginate');

const Schema = mongoose.Schema;

const TestSchema = new Schema({
  data: {
    type: String,
    unique: false,
    required: true
  },
}, {
  timestamps: true
});

TestSchema.plugin(mongoosePaginate);

module.exports = mongoose.model('Test', TestSchema); 

Constructor.js

class Constructor {
constructor() {}
    getAll() {
        return TestSchema.find({}, function (err, tests) {})
    }
}
module.exports = Constructor

db.js

let mongoose = require('mongoose')

// Connect to db
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true }, err => {
    if (err) 
        return console.log("Cannot connect to DB")
    connectionCallback()
    console.log("DB Connected")
});

let connectionCallback = () => {}

module.exports.onConnect = cb => {
    connectionCallback = cb
}

App.js

const express = require('express');

const app = express();
const ip = require('ip');
let db = require('./db')
const router = express.Router();
const port = 8888;
const http = require('http').createServer(app);


let ipAddress = 'localhost'; // only works to the local host
try {
  // will enable the server to be accessed from the network
  ipAddress = ip.address();
} catch( err ){
  console.err( err );
}

http.listen(port, ipAddress, 
   () => {
  let message = [
    `Server is running at ${ipAddress}:${port}`,
  ];

  console.log( ...message )
});


db.onConnect(() => {
    let Constructor = require("./pathTo/Constructor")

    let construct = new Constructor()

    app.use('/api', router.get('/test', function(req, res) {construct.getAll()}))
})

1 个答案:

答案 0 :(得分:0)

您的问题出在constructor.js getAll函数上,因为您也要返回并还传递了回调,所以承诺将永远无法解决。您应该解析promise或从回调中返回响应。

解决承诺:

class Constructor {
constructor() {}
    async getAll() {
        return await TestSchema.find({})
    }
}
module.exports = Constructor

从回调返回:

    class Constructor {
        constructor() {}
            getAll() {
                TestSchema.find({}, function (err, tests){
                      return tests.   
})
            }
        }
        module.exports = Constructor