Я работаю с 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?