【问题标题】:Express Server Won't Resolve Promises on MacExpress Server 不会在 Mac 上解决 Promise
【发布时间】:2020-10-28 16:38:41
【问题描述】:

问题

我有一个在 MacOS Catalina 10.15 上运行的快速服务器,并且没有解决任何内部承诺。不需要任何东西的普通 API 都可以工作并且已经用 Postman 测试过,但是任何需要查询我的数据库的东西都不起作用。在邮递员上,它只是无限加载请求,在我的 React 前端,我收到“代理错误:无法代理请求(econnreset)”。注意:同一台 express 服务器已在我的 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,我确定 const 用户 await 永远不会得到解决。

//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。如果这会导致任何问题,我已经用自制软件安装了节点。这主要是一个 mac 问题,因为我在我的 windows 或 linux 机器上从来没有遇到过这个问题。谢谢。

【问题讨论】:

    标签: node.js reactjs macos express network-programming


    【解决方案1】:

    想通了。问题实际上与 express 或 mac os 设置无关。

    我试图在 MAC OS Catalina 上设置一个新环境并使用 Node JS 版本 14。我的 windows 机器和 linux 机器都使用 Node JS 版本 13。Sequelize 报告了在 Node JS 版本 14 上挂起 API 请求的问题. 该信息记录在这里:

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

    希望这对遇到此问题的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多