Как развернуть приложение React, которое выполняет вызовы сервера через Node / Express в IIS?

#javascript #node.js #sql-server #reactjs #deployment

#javascript #node.js #sql-сервер #reactjs #развертывание

Вопрос:

У меня есть приложение React, которое выполняет вызовы в server.js file — эти вызовы представляют собой запросы на получение данных из базы данных с использованием запросов (я использую MSSQL).

Вот мой server.js:

 var express = require('express');
var app = express();
var sql = require("mssql");
var cors = require('cors');
app.use(cors())

var database =    {
    server: xxx,
    authentication: {
        type'default',
        options: {
            userName: ‘xxx’,
            password: ‘xxx’,
        },
    },
    options: {
        database: ‘xxx’,
        encryptfalse,
    },
}

app.get(‘/gettingInfo’, function(req, res)    {
    sql.connect(database, function(err)  {
        if (err)    {
            console.log("ERROR HERE")
            console.log(err);
        }

        var request = new sql.Request();  
    const finalRoomQuery = [query];

        request.query(finalRoomQuery, function(err, recordset)  {
            if (err)    {
                console.log(err);
            }
            res.send(recordset);
        });
    });
});


var server = app.listen(5000function ()   {
    console.log('Server is running...');
});
  

Ниже приведен пример кода из одного из моих компонентов, который извлекает данные из моего server.js:

 getData = () => {
        if (this.mounted === true)   {
            fetch('http://localhost:5000/gettingInfo')
            .then(results => results.json())
            .then(results => this.setState({data: results}))
            .catch(err => console.error(err));
        }
    }
  

Когда я запускаю node server.js в каталоге моего проекта, а затем в моем npm start , мое приложение react может извлекать данные и отображать их соответствующим образом.

Я работаю над развертыванием своего приложения. Я побежал npm run build , чтобы создать приложение, и я развернул его в IIS. Вот где я сталкиваюсь с проблемами — если на моем компьютере не запущен localhost: 5000 (т. Е. Если node server.js не введено), мое приложение не может запросить необходимые данные, я получаю (сбой) net::ERR_CONNECTION_REFUSED. Однако, когда у меня запущен localhost: 5000, приложение в IIS будет работать должным образом.

Мой вопрос: как я могу разместить это server.js также файл и / или как я могу настроить этот проект так, чтобы мне не нужно было запускать localhost: 5000 для правильной работы приложения? Я прошу прощения, если это какое-то прямое исправление или если я упускаю что-то очень простое, это мой первый опыт работы с веб-разработчиком.

Ответ №1:

В вашем серверном коде вы не отправляете ответ обратно во всех случаях.

 app.get(‘/gettingInfo’, function(req, res)    {
    sql.connect(database, function(err)  {
        if (err)    {
            console.log("ERROR HERE")
            console.log(err);
            return res.send("Error Message");
        }

        var request = new sql.Request();  
        const finalRoomQuery = [query];

        request.query(finalRoomQuery, function(err, recordset)  {
            if (err)    {
                console.log(err);
                return res.send("Error Message");
            }
            return res.send(recordset);
        });
    });
});
  

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

1. привет, Мухаммад, спасибо за твой ответ! Мне было интересно, это единственная проблема? Я спрашиваю, потому что ошибка, которую я получил, заключалась в том, что соединение было отклонено, и я не знаю, является ли добавление дополнительного res.send единственным решением.

2. Используете ли вы оба, react и node в одном проекте?

3. Если да, попробуйте посмотреть на прокси, это, как правило, не очень хорошая практика. Пожалуйста, разделите проекты, запустите их по отдельности

4. Мухаммед, да. Это интерфейсное и серверное приложение. Если я разделю их, должны ли мне быть запущены оба проекта (отдельные веб-сайты) в IIS? Каков следующий шаг для достижения желаемой функциональности? (сервер и веб-сайт работают независимо, и приложение может автоматически извлекать данные)

5. Нет, не IIS, просто запустите yarn start / npm start локально, и для развертывания вы можете бесплатно разместить свое приложение react на firebase и приложение nodejs на heroku

Ответ №2:

Вам нужно использовать менеджеры процессов, такие как PM2, и запускать свой сервер в этой консоли. pm2

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

1. привет, Виджай, спасибо за твой ответ. Мне было интересно, смогу ли я все еще разместить это в IIS?