API Nodejs не принимает метод POST, ошибка 405

#node.js #express #nginx-reverse-proxy

#node.js #экспресс #nginx-обратный прокси

Вопрос:

Я уже ищу существующий вопрос, но ни один из них не сработал для меня.

У меня есть простые методы nodejs, на моих локальных хостах они работают нормально, но когда я размещаю их на сервере (nginx), мой метод post выдает ошибку 405 (не разрешено), хотя я разрешил CORS Вот мой серверный файл

 var http = require('http');
var mongo = require('mongodb');
var cors = require('cors')
var express = require('express');
var app = express();
app.use(cors());
var DB = 'mongodb://localhost:27017/ClientApp';
app.use(express.json());
const clientRoutes = require('./client');
const authRoutes = require('./auth');

app.get('/api/status', (request, response) => {
    // console.log(request.body);
    response.json({ status: ' Server Running' });
});
app.use('/', clientRoutes);
app.use('/', authRoutes);
app.listen(3000, (resp) => {
    console.log('server listening at port number: ', 3000);
});
 

и вот маршрут, который не работает

 app.post('/api/register', (request, response) => {
    console.log('Request body: ', request.body);
    mongo.connect(DB, (error, client) => {
        console.log('Connect to Database successfully');
        const connectedDb = client.db('ClientApp');
        data = request.body;
        if (data.username) {
            connectedDb.collection('Users').insertOne(data, (error) => {
                if (error)
                    console.log('Error occured while registration')
                else {
                    response.status(200).send({ status: 'Response Received Successfully', code: 200 })
                    console.log('User registered successfully!');
                }
            })
        } else {
            response.status(204).send({ status: 'Please include the user details', code: 204 })
        }
    })
});
 

Комментарии:

1. Вы жестко запрограммированы для прослушивания порта 3000 , так ли настроена ваша конфигурация NGINX?

2. итак, на каком порту или IP-адресе я должен прослушивать? В моем nginx я просто использую обратный прокси,

3. Это действительно зависит от того, как он настроен. Редко бывает, что обратный прокси-сервер передает трафик на тот же порт, на который он вошел. Обычно вы используете переменную среды PORT для установки порта приложений, поэтому app.listen(3000, (resp) => { становится app.listen(process.env.PORT || 3000, (resp) => { . Опять же, все это зависит от того, как настроен обратный прокси и система.

Ответ №1:

Я вижу, что у вас установлен порт прослушивания вашего приложения 3000 . Вам нужно будет проверить в nginx.conf файле, который является портом, на который устанавливается трафик с обратного прокси. В зависимости от того, как все настроено, может быть установлена переменная среды, указывающая, какой порт должно прослушивать приложение. Обычно вызывается эта переменная PORT .

Если PORT устанавливается переменная среды, вы можете изменить свой код следующим образом:

 app.listen(process.env.PORT || 3000, (resp) => {
    console.log('server listening at port number: ', 3000);
});
 

В случае, если вы не знаете, using process.env.PORT || 3000 будет использовать значение process.env.PORT , если оно установлено. Если он ложный, то 3000 будет использоваться.

NGINX Посмотрите на nginx.conf server записи, чтобы определить, как обратный прокси отправляет трафик в серверные приложения.