Экспресс-сервер не разрешает обещания на Mac

#node.js #reactjs #macos #express #network-programming

#node.js #reactjs #macos #экспресс #сетевое программирование

Вопрос:

Проблема

У меня есть сервер express, работающий на macOS Catalina 10.15, и он не разрешает никаких внутренних обещаний. Обычные API, которые ничего не требуют, работают и были протестированы с Postman, но все, что требует запроса к моей базе данных, не работает. В postman он просто бесконечно загружает запрос, и в моем интерфейсе React я получаю сообщение «Ошибка прокси: не удалось выполнить запрос прокси (econnreset)». Примечание: Этот же express server был протестирован на моей машине с Windows и Linux, и он работал отлично, поэтому я считаю, что это проблема Mac.

Мой серверный код здесь:

 #!/usr/bin/env node

// Module dependencies;
const app = require('../app');
const http = require('http');
const { normalizePort, onListening } = require('./config');

// Get port from environment and store in Express;
const port = normalizePort('1234');
app.set('port', port);

// Create HTTP server;
const server = http.createServer(app);

// Event listener for HTTP server "error" event;
const onError = error => {
  if (error.syscall !== 'listen') throw error;

  const bind = typeof port === 'string'
    ? 'Pipe '   port
    : 'Port '   port;

  switch (error.code) { // Handle specific listen errors with friendly messages;
    case 'EACCES':
      console.error(bind   ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind   ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

// Listen on provided port, on all network interfaces with event listeners and event handlers;
server.listen(port);
console.log(`server now listening on port: ${port}`)
server.on('error', onError);
server.on('listening', onListening(server));
  

Вот импортируемое приложение:

 // Module dependencies;
const express = require("express");
const path = require("path");
const logger = require("morgan");
const helmet = require("helmet");
const compression = require("compression");
const cors = require("cors");
const passport = require("passport");
require("dotenv").config();

// Our database instance;
const db = require("./database");

// Our apiRouter;
const apiRouter = require("./routes/index");

// Instantiate our express application;
const app = express();

// A helper function to create our app with configurations and middleware;
const configureApp = () => {
  app.use(helmet());
  app.use(logger("dev"));
  app.use(express.json());
  app.use(express.urlencoded({ extended: false }));
  app.use(compression());

  // Passport middleware
  app.use(passport.initialize());
  require("./bin/passport")(passport);

  app.use(
    cors({
      origin: "*",
    })
  );

  // Mount our apiRouter;
  app.use("/api", apiRouter);
};


// Main function declaration;
const bootApp = async () => {
  await configureApp();
  //await seedDb();
  //db.sync();
};

// Main function invocation;
bootApp();

// Export our app, so that it can be imported in the www file;
module.exports = app;
  

Я проверил свои учетные данные базы данных с помощью pgadmin, так что это не может быть проблемой. Кроме того, моя база данных не имеет ограничений и открыта для всех адресов. Вот API, который я пытался запросить. Я его очистил. Используя console.log, я определил, что ожидание постоянного пользователя никогда не разрешается.

 //login
router.post("/login", async (req, res, next) => {
  try {
    const { email, password } = req.body;

    if (!email || !password) {
      throw new ErrorHandler(400, "Missing required fields");
    }

    const user = await User.findOne({ where: { email: "employee@example.com" } });

    if (!user) {
      throw new ErrorHandler(404, "Incorrect credentials");
    }

    const isMatch = await bcrypt.compare(password, user.password);

    res.status(200).json(user);
  } catch (err) {
    next(err);
  }
});
  

Как вы думаете, это может быть проблемой из-за проблем с сетью? Я сбросил настройки сети до значения по умолчанию и переустановил node_modules, npm и node. Я установил узел с homebrew, если это может привести к каким-либо проблемам. Это в первую очередь проблема Mac, поскольку у меня никогда не было этой проблемы на моем компьютере с Windows или Linux. Спасибо.

Ответ №1:

Понял это. Проблема на самом деле не имела ничего общего с express или настройками mac os.

Я пытался настроить новую среду на MAC OS Catalina и использовал Node JS версии 14. На моем компьютере с Windows и Linux использовалась версия Node JS 13. Sequelize сообщила о проблемах с зависанием запросов API на Node JS версии 14. Эта информация задокументирована здесь:

https://github.com/sequelize/sequelize/issues/12158

Надеюсь, это поможет всем, у кого есть эта проблема.