我正在通过Axios向我的节点服务器发出 echo "abcdefhijklmnopqrstuvwxyzoo" | sed -r 's/[^o]/_/g'
API请求,以便将POST
值发送到我的MongoDB中。
以下代码在string
本地运行良好,但只要我将代码推送到Heroku,请求就会开始返回localhost:8080
。我的节点服务器在404
上运行,我在其Express框架上配置了CORS。
以下是我向节点服务器发出https
请求时收到的输出:
POST https://www.mynodeserverurl.com/api/upload-csv 404(未找到)
这是我处理此API请求的Node服务器的代码。
NodeServer / app.js
POST
NodeServer /路由/ API / api.js
// Add headers so we can make API requests
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
// intercept OPTIONS method
if ('OPTIONS' == req.method) {
res.sendStatus(200);
} else {
next();
}
});
向上述路由发出router.post('/upload-csv/', (req, res) => {
let csv = req.body.csv_string.split('$');
let csv_name = csv[0];
let csv_string = csv_name+csv[1];
CSVStore.findOne({url: csv_name})
.then((csv) => {
console.log('IN POST REQUEST');
console.log(csv_string);
return res.status(204).json({msg: 'All good!'});
})
.catch((err) => {
console.log('There was an error!', err);
});
});
请求甚至不会在节点服务器控制台中显示POST
个结果。
以下是我向NodeServer发出console.log()
请求的webapp代码
POST
我发出axios.post(`${utils.fetchURL()}/upload-csv`, {
csv_string: csv_string
})
.then(function(response) {
console.log('Response', response);
return {};
})
.catch(function(error) {
console.log('There was an error!', error);
return {};
});
请求的网址是正确的,POST
不是空的;它有数据。
我需要在我的NodeServer csv_string
中进行某种配置以允许app.js
上的CORS吗?
更新:我可以确认https
请求有效。我可以发出GET
请求从MongoDB中检索GET
。为什么string
有效且GET
没有?
答案 0 :(得分:0)
我遇到了同样的问题。我所有的API端点都可以在本地和产品中使用,但是我的一个POST端点可以在生产中使用404,但可以用于GET。
事实证明,在运行“ git push heroku master”之前,我忘记了暂存并提交我的最新更改。一旦执行完此操作并再次运行“ git push heroku master”,所有内容均已发布并可以在生产环境中使用。
因此,如果您遇到此问题,请尝试