node.js - 从带有数据的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 或任何其他模块的解决方案就可以了。
提前致谢
解决方案
有人在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)
})
推荐阅读
- android - 反应原生地图:onPress 标记事件是延迟
- javascript - WebAssembly 中 call_indirect 的错误结果
- javascript - NetSuite:TypeError record.createCurrentLineItemSubrecord 不是函数?
- c - 如何实施独特性检查
- javascript - 数据显示正确,但控制台显示“无法读取未定义的属性‘映射’”
- python - Django 未使用的导入语句:virtualenv 问题
- bash - 如何为命令“cd ~1”创建 bash 别名
- c - 似乎没有原因的编译错误 /usr/bin/ld 针对 '.rodata' 重新定位
- c - Function calling in a wrong way (sum of a sequence)
- cordova - FileReader(cordova-plugin-file)失败