Как отправить POST-запрос в ответ на node.js Express? - PullRequest
0 голосов
/ 26 февраля 2020

Я следил за этим видео, чтобы избавиться от проблемы cors. Он работал нормально для запроса GET. Но когда я пытаюсь отправить запрос POST, он не работает. У меня нет контроля в 3rd_Party_Api, поэтому я ничего не могу изменить. Мои звонки следующие: req-request и res-response.

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

ReactApp <- res-- Express <- res-- 3rd_Party_API </p>

Я не уверен, где я иду не так. Я публикую свои файлы здесь. 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 Ответ

1 голос
/ 26 февраля 2020

Ваш сервер использует app.get. Для обработки почтового запроса вам нужно изменить его на app.post или app.all

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...