我正try 在我的本地主机上运行一个Node/Express服务器,该服务器使用MongoDB作为数据库.我以前从来没有用过MongoDB,所以我按照Mongo文档安装了MongoDB和Munosh.

安装完成后,我在默认端口27017上运行了mongo服务器和mongoh客户端,没有任何问题.

魔神控制台消息:

...
    {"t":{"$date":"2023-04-13T16:58:08.218-03:00"},"s":"I",  "c":"NETWORK",  "id":23015,   "ctx":"listener","msg":"Listening on","attr":{"address":"127.0.0.1"}}
    {"t":{"$date":"2023-04-13T16:58:08.218-03:00"},"s":"I",  "c":"NETWORK",  "id":23016,   "ctx":"listener","msg":"Waiting for connections","attr":{"port":27017,"ssl":"off"}}
...

Mongoh控制台消息:

...
Current Mongosh Log ID: 64385f4e504e549f2d810293
Connecting to:          mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.0
Using MongoDB:          6.0.5
Using Mongosh:          1.8.0
...

当我try 使用NPM启动来运行服务器时,它应该在我的本地主机上创建一个db,但我得到了以下错误:

Listening on port 4000
Caught exception: {"message":"connect ECONNREFUSED ::1:27017","reason":{"type":"Single","setName":null,"maxSetVersion":null,"maxElectionId":null,"servers":{},"stale":false,"compatible":true,"compatibilityError":null,"logicalSessionTimeoutMinutes":null,"heartbeatFrequencyMS":10000,"localThresholdMS":15,"commonWireVersion":null}}

我非常确定Mongo的服务器和客户端都已经在运行,所以我不知道为什么会出现CONNECT ECONNREFUSED错误.欢迎任何帮助

UPDATE 1: Add code

帖子主题:Re:Колибри

{
  "apiVersion": "v1.1",
  "entorno": "default",
  "mongodb": {
      "uri": "mongodb://localhost:27017/challenge_v1_db"
  },
  "apiKeys": {
    "localhost": "35cfafab8ef7cfcb2a9bc4e8e4303f59"
  }
}

FakeData.js:

import Products from '@/models/Products.model';
import Deliveries from '@/models/Deliveries.model';
import faker from 'faker';

const productsQuantity = 2000;
const deliveriesQuantity = 100000;

const buildProducts = async () => {
  let total = await Products.countDocuments();
  if (total > productsQuantity) {
    console.log('fake Products data ready');
    return;
  }

  let data = [];
  for (let i = 0; i < productsQuantity; i++) {
    let fakeData = {
      reference: faker.commerce.productName(),
      description: faker.commerce.productDescription(),
      weight: faker.datatype.number(),
      height: faker.datatype.number(),
    };
    data.push(Products.create(fakeData))
  };

  await Promise.all(data);
}

const buildDeliveries = async () => {
  let total = await Deliveries.countDocuments();
  if (total > deliveriesQuantity) {
    console.log('fake Deliveries data ready');
    return;
  }
  let data = [];
  for (let i = 0; i < deliveriesQuantity; i++) {
    let random = faker.datatype.number();
    let productsFromDb = await Products.find().limit(random > 6 ? 6 : random);

    let products = [];
    for (let product of productsFromDb) {
      products.push(product._id);
    }
    let fakeData = {
      when: faker.date.soon(),
      origin: {
        street: faker.address.streetName(),
        number: faker.datatype.number(),
        postalCode: faker.address.zipCode(),
        city: faker.address.city(),
      },
      destination: {
        street: faker.address.streetName(),
        number: faker.datatype.number(),
        postalCode: faker.address.zipCode(),
        city: faker.address.city(),
      },
      products,
    };

    data.push(Deliveries.create(fakeData))
  };

  await Promise.all(data);
}

export default {
  buildProducts,
  buildDeliveries
}

App.js:

import bodyParser from 'body-parser';
import express from 'express';
import cors from 'cors';
import mongoose from 'mongoose';
import config from 'config';
import fakeData from './config/fakeData';

require('mongoose-schema-jsonschema')(mongoose);

const app = express();
app.use(cors());
app.use(bodyParser.json({limit: '25mb'}));
app.use(bodyParser.urlencoded({
  extended: true
}));

mongoose.Promise = global.Promise;

mongoose.connect(config.get('mongodb.uri'), {
  useNewUrlParser: true,
  connectTimeoutMS: 2147483647,
  useUnifiedTopology: true
});
mongoose.connection.on('error', (err) => {
  throw err;
});
mongoose.connection.on('connected', async () => {
  console.log('MongoDB database connected! Environment:', config.get('entorno'));
  try {
    await fakeData.buildProducts();
    await fakeData.buildDeliveries();
  } catch (e) {
    console.log('MongoDB ensuring indexes FAIL', e);
  }
});


// Routes
import router from './components/router/routes';
router.mountRoutes(app);


// Handle uncaughtException
process.on('uncaughtException', (err) => {
  console.log('Caught exception: %j', err);
});

export default app;

推荐答案

该问题看起来可能与使用IPv6(::1)而不是使用IPv4(127.0.0.1)的连接有关.try 更改您的配置:

{
  "apiVersion": "v1.1",
  "entorno": "default",
  "mongodb": {
      "uri": "mongodb://127.0.0.1:27017/challenge_v1_db"
  },
  "apiKeys": {
    "localhost": "35cfafab8ef7cfcb2a9bc4e8e4303f59"
  }
}

此外,您还可以向mongoose.connect() Call In添加一个选项来帮助调试该问题:

mongoose.connect(config.get('mongodb.uri'), {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  serverSelectionTimeoutMS: 5000,
  socketTimeoutMS: 45000,
  family: 4
});

Node.js相关问答推荐

postgresql层与应用层的序列化

@nuxtjs/站点 map 错误提示:找不到包';NitroPack';

为什么我的表单数据在我的POST请求中作为应用程序/json发送,为什么它返回错误请求错误?

AWS-ROUTE 53指向S3存储桶,错误是别名目标名称不在目标区域内

Webpack:如何避免导出函数的重命名?

创建查询以展开数组并筛选出具有特定值的元素之后的元素

如何修复我的 NodeJS SSE 写入函数以在后续调用中更新 HTML?

如何获取需要加载cheerio的网站部分数据?

为什么 $or 在带有正则表达式的mongoose 中不能正常工作

使用 .pipe(res) 向客户端发送音频不允许您搜索?

postman 发送请求……永远

无法更新MongoDB中的文档:";伯森场';writeConcern.w';是错误的类型';数组'&引用;

如何更改NodeJS中的堆栈大小限制?

在 Express-js 中使用路由

按日期时间字段获取最新的 MongoDB 记录

在单独的模块中定义 Mongoose 模型

从 zip 文件在 AWS 中创建 lambda 函数

npm install - javascript堆内存不足

未在 Windows 8.1 上构建的 node 包 - 缺少 Microsoft.Cpp.Default.props

node.js 示例