首页 > 解决方案 > 从带有数据的nodejs向php Api发出请求

问题描述

我在 example.com/api.php 运行了一些 api

为了将 api 与 ajax 一起使用,我使用以下代码:

        $.ajax({
            url: 'https://example.com/api.php',
            method: 'post',
            data: {'pass': 'mypass', 'action': 'someaction'},
        }).done(function(results){
            //results = JSON.parse(results); //no need to parse it!
            console.log(results);

            });
        })

我试图用 node.js 实现同样的目标,但我不知道如何发送数据。

我尝试了很多方法,这里是其中之一:

axios.post('https://example.com/api.php', {
    'pass': 'passs',
    'action': 'myaction'
})
.then((res) => {
  console.log(`statusCode: ${res.statusCode}`)
  console.log(res)
  console.log(`statusCode: ${res.data}`)
})
.catch((error) => {
  console.error(error)
})

但我根本无法让它工作!res.statusCode 返回 undefined 而 res.data 什么也不返回。服务器记录每个用户尝试通过 api 执行的操作。php api 有这样的东西:

    if($_POST['pass']== thePassword && $_POST['action']=='aSpecifiAction'){
// log the action,
//execute the action
}

我的操作没有出现在日志中,这意味着我的 axios 代码没有向 api 发送任何数据。那么如何让它表现得像上面的 jquery 代码呢?

使用 axios 不是必须的,如果有更简单的 request 或任何其他模块的解决方案就可以了。

提前致谢

标签: node.jsposthttp-postaxiosnode-request

解决方案


有人在github上帮助我找到了问题。问题是“jQuery 默认使用 application/x-www-form-urlencoded 格式的 POST 数据,而 axios 默认使用 JSON”

在此链接中,他们详细说明 https://www.npmjs.com/package/axios#using-applicationx-www-form-urlencoded-format

解决方案 :

const axios = require('axios')

const qs = require('qs');
axios.post('https://example.com/api.php',  qs.stringify({
    'pass': 'passs',
    'action': 'myaction'
}))
.then((res) => {
  console.log(`statusCode: ${res.statusCode}`)
  console.log(res)
  console.log(`statusCode: ${res.data}`)
})
.catch((error) => {
  console.error(error)
})

推荐阅读