javascript - 如何在没有本地主机的情况下将数据从反应发送到 nodejs?
问题描述
我正在尝试将 reactjs 和 nodejs 应用程序部署到 heroku。我已经成功部署了前端,但是前端正在使用 localhost 向 nodejs 发送数据,因此当通过 heroku 运行应用程序时,只有前端正在工作。
此代码将数据发送到 nodejs。
saveUserJson = (User) =>{
const url = 'http://localhost:5000/write'
axios.post(url,User)
.then(response => {
//console.log(response);
});
}
这是 nodejs 代码(忽略代码中的主机名)。
const express = require('express');
const bodyParser = require('body-parser');
const fs = require('fs');
const morgan = require('morgan');
const cors = require('cors');
const jsonData = require('../src/descriptors/bnk48.json')
const app = express();
const port = 5000;
const hostname = '192.168.43.113';
app.use(bodyParser.json());
app.use(morgan('dev'));
app.use(cors());
app.get('/',(req,res) => res.status(200).send({
message: "Server is running..."
}));
const WriteTextToFileSync = (contentToWrite) => {
fs.writeFileSync('./src/descriptors/bnk48.json',contentToWrite,(err) =>{
//console.log(contentToWrite);
if(err) {
console.log(err);
}else {
console.log('Done writing to file successfully...')
}
})
}
const user = {
}
app.post('/write',(req,res,next) =>{
const user = {
"name": req.body[0].name,
"descriptors": req.body[0].descriptors
}
jsonData[user.name]=user
//console.log(req.body[0].descriptors)
const requestContent = JSON.stringify(jsonData,null,2);
WriteTextToFileSync(requestContent)
});
app.use((req,res,next) => res.status(404).send({
message: "Couldn't find specified route that was requested..."
}));
app.listen(port,hostname,()=>{
console.log(
`
!!! server is running..
!!! Listening for incoming requests on port ${port}
!!! Server running at http://${hostname}:${port}/
!!! http://localhost:5000
`
)
})
如何更改 localhost 以便在部署时自动选择发送数据的位置?
解决方案
如何更改 localhost 以便在部署时自动选择发送数据的位置?
有几种方法可以做到这一点,但为此目的使用环境变量是很常见的。这些是由环境设置的,您的开发机器是一个环境,而您在 Heroku 上的生产站点是另一个环境。例如,您可以定义环境变量BACKEND_ROOT_URL
来保存站点的架构和 FQDN,并像这样进行 axios 调用:
saveUserJson = (User) =>{
const url = `${process.env.BACKEND_ROOT_URL}/write`
axios.post(url,User)
.then(response => {
//console.log(response);
});
}
的构建时间值url
会有所不同,具体取决于您在哪个环境中执行构建。
可以通过多种方式在本地设置环境变量。在 Bash shell 中,您可以手动设置它们,例如 export BACKEND_ROOT_URL=http://localhost:5000
. 不过,这很快就会很无聊,所以我建议您查看dotenv,它可以有效地为您处理这个问题。
Heroku 有自己的方式来处理 envvars 的设置 - 检查文档here
推荐阅读
- c# - c# linq 查询提取重复数据类型
- jquery - 下拉点击菜单上可见的第一项
- javascript - 为什么要使用 Webpack 来打包运行在 node 环境中的应用程序
- ionic-framework - 在 App 模块中的提供程序中添加 File 和 FilePath 在 Ionic 3 中引发错误
- java - 如何在官网查询Spring Cloud的历史版本
- perl - 列表中的双面参考
- javascript - 从 javascript 调用 react 组件函数
- c++ - 如何在 AVX2 中将 32 位无符号整数转换为 16 位无符号整数?
- c# - 自动分页 & 排序 & 过滤到剃须刀页面脚手架
- c# - CS0103:当前上下文中不存在该名称?