#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
записи, чтобы определить, как обратный прокси отправляет трафик в серверные приложения.