无法使用React native发出发布请求

时间:2018-09-06 09:40:54

标签: react-native fetch

试图对我的RN项目实施nodemailer,但是我在提出基本的发帖请求时遇到了困难。我想念什么?

RN代码:

const sendEmail = (_email, _topic, _text) => {
    return dispatch => {
        fetch('http://MY_IP/api/sendEmail', {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
                email: _email,
                topic: _topic,
                text: _text
            })
        })
            .then((res) => res.json())
            .then((res) => {
                console.log('here is the response: ', res);
            })
            .catch((err) => {
                console.error('here is the error: ', err);
            })
    }
}

服务器:

const express = require('express');
const app = express();

app.post('/api/sendEmail', (req, res) =>{
    console.log(req.body);
    res.send(req.body)
})

const PORT = process.env.PORT || 5000;
app.listen(PORT);

我得到req.body是不确定的。

如果我需要发布更多代码或添加package.json,请告诉我

2 个答案:

答案 0 :(得分:1)

我认为您的RN代码很好,但是服务器代码缺少正文解析器软件包。在服务器代码看起来像这样

之后,在“ package.json”中安装依赖项“ npm install body-parser --save”
const express = require('express');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.post('/api/sendEmail', (req, res) =>{
    console.log(req.body);
    res.send(req.body)
})

const PORT = process.env.PORT || 5000;
app.listen(PORT);

希望有帮助。

答案 1 :(得分:1)

更好地使用axios软件包,它易于向api发送发布请求。

打包链接:https://www.npmjs.com/package/axios

例如:

  axios.post('/http://MY_IP/api/sendEmail', {
    email: _email,
    topic: _topic,
    text: _text
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });