mongodb / express: коллекция MongoDB пуста - PullRequest
0 голосов
/ 13 июня 2019

Я работаю с MongoDB, Mongoose, Express и машинописью.Я тоже использую Heroku.

Когда я подключаюсь к mongodb.com (производство) с помощью mongoose, я получаю пустую коллекцию с помощью POSTMAN.

Когда я работаю в localhost, я получаю коллекцию нормальнои я получаю данные.

import { Base } from '../pocos/base.poco';
import * as mongoose from 'mongoose';
import { Resposta } from '../pocos/resposta.poco';
import { BLL_Coneixements } from '../_bll/coneixements.bll';

const uri: string = 'mongodb://127.0.0.1:27017/xxx';
const uriProd: string = 'mongodb://xxx1:xxx@xxx-shard-00-00-fuss3.mongodb.net:27017,xxx-shard-00-01-fuss3.mongodb.net:27017,xxx-shard-00-02-fuss3.mongodb.net:27017/xxx?ssl=true&replicaSet=xxx-shard-0&authSource=xxx1&retryWrites=true';


export const dataSchema = new mongoose.Schema({

});

const options = {
    useNewUrlParser: true,
    useCreateIndex: true,
    useFindAndModify: false,
    autoIndex: false, // Don't build indexes
    reconnectTries: Number.MAX_VALUE, // Never stop trying to reconnect
    reconnectInterval: 500, // Reconnect every 500ms
    poolSize: 10, // Maintain up to 10 socket connections
    // If not connected, return errors immediately rather than waiting for reconnect
    bufferMaxEntries: 0,
    connectTimeoutMS: 10000, // Give up initial connection after 10 seconds
    socketTimeoutMS: 45000, // Close sockets after 45 seconds of inactivity
    family: 4 // Use IPv4, skip trying IPv6
  };

/**
 * 
 */
export class  DAL_Base  
{      
    private general = null;

   /**
     * @param _esProduccio 
     */
    constructor (private _esProduccio: boolean) {
        console.log(_esProduccio);

    }



    /**
     * 
     * @param cultura 
     */
    public Get<T extends Base>(cultura: string, coleccio: string): Promise<Resposta>
    {        
        return new Promise((resolve, reject) => {
            try 
            {
                var host =  uriProd;

                if (!this._esProduccio) 
                {
                    host =  uri;
                }

                mongoose.connect(host, options).then(() =>  {
                    //var data = mongoose.model(coleccio, dataSchema);
                    //var data = conn.db.collection(coleccio);

                    console.log("conected");

                    var action = function (err, collection) {

                        console.log("data in " + coleccio);
                        // Locate all the entries using find
                        collection.find({"Cultura": cultura}).toArray(function(err, results) {
                            let resp = new Resposta;
                            results = JSON.parse(JSON.stringify(results));

                            if (results != null) console.log("query with results in collection: " + coleccio + " with length: " + results.length );

                            resp.coleccio = coleccio;
                            resp.ok = true;

                            if (err != null) {
                                throw err;
                            }
                            else
                            {    
                                switch (coleccio)
                                {
                                    case "coneixements":
                                    resp.data = BLL_Coneixements.TractarDades(results);
                                        break;
                                    case "capcalera":                                
                                        resp.data = results[0];
                                        break;
                                    default:
                                        resp.data = results;
                                }                        

                                if (resp.data == null) {
                                    resp.ok = false;
                                    resp.data = "No hi han dades per la colecció [" + coleccio + "] ...";
                                } 
                            }

                            resolve(resp);
                        });
                    };

                    mongoose.connection.db.collection(coleccio, action);
                })
                .catch((err) => {
                    let resp = new Resposta;
                    resp.data = err;
                    resp.ok = false;
                    reject(resp);             
                })
            }
            catch (ex)
            {
                let resp = new Resposta;
                resp.data = ex;
                resp.ok = false;
                reject(resp);         
            }
        });

    }
}

Результат console.log: запрос с результатами в коллекции: capcalera с длиной: 0

, когда я тестируюв мою локальную базу данных этот код работает.

мой package.json:

{
  "name": "functions",
  "scripts": {
    "lint": "tslint --project tsconfig.json",
    "build": "tsc",
    "start": "node ./lib/index.js"
  },
  "keywords": [
    "example",
    "heroku"
  ],
  "engines": {
    "node": "10.x"
  },
  "main": "lib/index.js",
  "dependencies": {
    "@types/typescript": "^2.0.0",
    "body-parser": "^1.19.0",
    "dotenv": "^8.0.0",
    "express": "^4.17.1",
    "firebase-admin": "~7.0.0",
    "firebase-functions": "^2.3.0",
    "firebase-functions-helper": "^0.7.1",
    "mongoose": "^5.5.13",
    "typescript-express": "0.0.2"
  },
  "devDependencies": {
    "firebase-functions-test": "^0.1.6",
    "nodemon": "^1.19.1",
    "ts-node": "^8.2.0",
    "tslint": "^5.17.0",
    "typescript": "^3.5.1"
  },
  "private": true
}

Не могли бы вы мне помочь, пожалуйста?Могу ли я получить производственные данные от localhost: 27017?

...