#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’,
encrypt: false,
},
}
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(5000, function () {
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?