#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
Надеюсь, это поможет всем, у кого есть эта проблема.