首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nodejs中的axios不发送请求体

问nodejs中的axios不发送请求体
EN

Stack Overflow用户
提问于 2022-08-28 17:23:36
回答 2查看 112关注 0票数 -1

我试图使用来自NodeJS的axios发送一个POST请求,但是请求的主体/数据没有发送。

我在后端使用axios和NodeJS,这是我的NodeJS脚本,它发送请求:

代码语言:javascript
复制
const axios = require("axios").default;

axios.post("my url goes here/email.php", {
   emailto: "receiver email",
    toname: "name",
    emailfrom: "sender email",
    fromname: "name",
    subject: "subject",
    messagebody: "hello world"
});

当接收服务器试图读取请求中的数据(例如声明$subject = $_POSTsubject;在PHP中)时,请求的参数是null -因此$_POST[subject]返回null。

但是,当我使用jQuery (前端)而不是axios发送相同的请求时,它工作得很好,因为接收服务器现在可以读取POST请求的数据(因此$_POST[subject]这次返回"subject"):

代码语言:javascript
复制
$.ajax("https://my url goes here/email.php", {
  method: "POST",
  cache: false,
  data: {
        emailto: "receiver's email",
        toname: "name",
        emailfrom: "sender email",
        fromname: "name",
        subject: "subject",
        messagebody: "hello world"
    }
})

当我在PHP $_POST[subject]上运行第二个片段时,返回"subject",但当我在NodeJS中运行第一个代码段时,$_POST[subject]返回null。为什么axios不发送我的请求体?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-29 08:35:54

看看axios文档

默认情况下,axios将JavaScript对象序列化为JSON

所以您是服务器的POSTing JSON。

PHP在填充$_POST时不支持JSON。

您需要发布它支持的格式,例如URL编码的表单数据或多部分表单数据。

(您的jQuery示例使用URL编码的表单数据)。

要以应用程序/x-www表单-urlencoded格式发送数据,您可以使用URLSearchParams API (它在绝大多数浏览器中都支持)和节点(从2018年发布的v10开始)。 const params =新URLSearchParams({ foo:'bar‘});params.append('extraparam','value');axios.post('/foo',params);

票数 0
EN

Stack Overflow用户

发布于 2022-08-28 20:12:09

向请求中添加一个内容主体(如{ headers: {'Content-Type': 'application/json'} ),但是我会编辑这个和

代码语言:javascript
复制
const axios = require("axios");

var data = JSON.stringify({ 
        emailto: "receiver email",
        toname: "name",
        emailfrom: "sender email",
        fromname: "name",
        subject: "subject",
        messagebody: "hello world"
        });

var config = {
  method: 'post',
  url: 'https://alpha-howl.com/database/email.php',
  headers: { 
    'Content-Type': 'application/json'
  },
  data : data
};


try { 
    await axios(config)
} catch (ex) { 
throw ex
} 

主要是为了确保您正在解析axios返回的承诺,以确保请求甚至成功。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73520743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档