如何发送 POST 请求以响应 node.js Express?

Posted

技术标签:

【中文标题】如何发送 POST 请求以响应 node.js Express?【英文标题】:How to send a POST request in react to node.js Express? 【发布时间】:2020-06-09 22:23:49 【问题描述】:

我关注了this 视频以摆脱 cors 问题。它适用于 GET 请求。但是当我尝试发送 POST 请求时,它不起作用。我无法控制 3rd_Party_Api,因此无法对其进行任何更改。 我的电话如下: req-request 和 res-response。

ReactApp(3000) --req--> Express(8080) --req--> 3rd_Party_API(9091)

ReactApp

我不确定我哪里出错了。我在这里发布我的文件。 PostApp.js

import React,  Component  from 'react';
//import ReactDOM from 'react-dom';
import './App.css';
import axios from 'axios';

class App extends Component 

    constructor(props) 
        super(props);
        this.state = 
          varName: '',
          submit: ''
        
        this.handleChange = this.handleChange.bind(this)
        this.handleSubmit = this.handleSubmit.bind(this)
    
    handleChange(event) 
        this.setState(
          varName: event.target.value
        );
    
    handleSubmit(event)
        event.preventDefault()
        const base_url="http://127.0.0.1:8080/api/addvar"
        const data=varName:this.state.varName
        axios.post(base_url,data)
        .then(response =>
            console.log(response)
        )
        .catch(error =>
            console.log(error.response)
        )
        console.log(JSON.stringify(data))

        this.setState(
            submit: this.state.varName
        )
    

  render()
      return(
          <div className="App">
            <form onSubmit=this.handleSubmit>
                <label>varName: </label>
                <input type="text"  value=this.state.varName onChange=this.handleChange />
                <br/><br/><input type="submit" value="Add Name"/> 
            </form>
            <h1>this.state.submit</h1>
          </div>
      )
  

export default App;

服务器.js

var request = require('request-promise');
var cors = require('cors');
var express = require('express');
var url = require('url');
var bodyParser = require('body-parser');

var app = express();
var server = app.listen('8080',function()console.log('listening to port 8080'););

app.use(bodyParser.json()); 
app.use(cors());
//app.get('/api/getNames',runThisCode);
console.log('got1');
app.get('/api/addName',plusname);
console.log('got3');

function plusname(req,res)
    var input = req.body;
    console.log('urlbody:' ,input);
    var options = 
        method: 'POST',
        url: 'http://localhost:9091/v1/names/',
        body: req.body,
        header:
            'content-type' : 'application/json'
        ,
        resolveWithFullResponse: true,
        json: true

    ;
    request(options)
    .then((r1) =>
        res.send(JSON.parse(r1.body));
    )
    .catch(err =>
        console.log(err.response);
    )


【问题讨论】:

【参考方案1】:

您的服务器正在使用app.get。要处理发布请求,您需要将其更改为 app.postapp.all

https://expressjs.com/en/guide/routing.html

【讨论】:

嗨,当我将它更改为 app.post 时,我又回到了 cors 问题的方方面面。 我不确定这是否是正确的答案,但它部分解决了我的问题,尽管遇到了 cors 问题。谢谢。

以上是关于如何发送 POST 请求以响应 node.js Express?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 node.js Express 发送 POST 请求?

如何在 express/node js 中发送错误 http 响应?

如何在 jquery 中读取 post 请求的响应?

如何使用普通的POST请求将文件发送到apps脚本?

使用 Node.js 发送 POST JSON 数据并接收(无 BODYPARSER)

无法使用javascript向ASP.NET web api Controller发送http POST请求