Javascript 如何部署通过Node/Express向IIS进行服务器调用的React应用程序?
我有一个React应用程序,它调用server.js文件——这些调用是使用查询从数据库获取数据的请求(我使用的是MSSQL) 这是我的server.js:Javascript 如何部署通过Node/Express向IIS进行服务器调用的React应用程序?,javascript,node.js,sql-server,reactjs,deployment,Javascript,Node.js,Sql Server,Reactjs,Deployment,我有一个React应用程序,它调用server.js文件——这些调用是使用查询从数据库获取数据的请求(我使用的是MSSQL) 这是我的server.js: var express = require('express'); var app = express(); var sql = require("mssql"); var cors = require('cors'); app.use(cors()) var database = { server: xx
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...');
});
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));
}
}
下面是我的一个组件的代码示例,该组件从my 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...');
});
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运行build
来构建应用程序,并将其部署到了IIS。这就是我遇到问题的地方——如果我的机器上没有运行localhost:5000(即如果没有输入node server.js
),我的应用程序无法查询所需的数据,我会得到一个(失败的)net::ERR\u连接。但是,当我运行localhost:5000时,IIS上的应用程序将按预期运行
我的问题是:我如何也托管这个server.js文件,和/或如何配置这个项目,使应用程序不必运行localhost:5000才能正常工作?如果这是一个简单的修复,或者我缺少一些非常基本的东西,我很抱歉。这是我第一次使用Web开发。在您的服务器代码中,您并不是在所有情况下都返回响应
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);
});
});
});
您需要使用PM2之类的流程管理器,并在该控制台中运行服务器。
嘿,穆罕默德,谢谢你的回复!我在想,这是唯一的问题吗?我这样问是因为我得到的错误是连接被拒绝,我不知道是否添加额外的res.send是唯一的修复方法。您是否在单个项目中同时使用react和node?如果是,请尝试查看代理,这通常不是一个好做法。请把项目分开,单独开始,穆罕默德,是的。这是一个前端和后端应用程序。如果我将它们分开,我是否必须在IIS上运行这两个项目(单独的网站)?要实现我想要的功能,下一步是什么?(服务器和网站都独立运行,应用程序可以自动获取数据)不,不是IIS,只需在本地运行Thread start/npm start,部署时,您可以在firebase上托管react应用程序,在heroku上为freehey Vijay托管nodejs应用程序,感谢您的回复。我想知道我是否仍然可以在IIS上托管这个?