使用 HTTP API
https://api.weixin.qq.com/tcb/databaseadd?access_token=ACCESS_TOKEN
向小程序云开发数据库中添加数据时,若数据中出现中文会提示47001错误,提示如下:
{"errcode":47001,"errmsg":"data format error hint: [R07l406662278]"}
1)若Json数据中没有中文就不会出现这个提示,而且会成功添加到数据库,
2)使用PostMan模拟也不会出现错误提示,中文英文都可成功添加
困扰了好几天了,请哪位大神帮忙诊治下,不胜感激
本人后台使用nodejs,粘贴代码如下:
async function addBook(){
let token = await tokenModel.get()
//console.log(token.accessToken)
var rowContents={
"env": "hxxx-xxxxx",
"query": `db.collection("books").add({data: [{"title" : "西游记",
"author": "吴承恩"}]})`
}
contents=JSON.stringify(rowContents)
//console.log(contents)
const options = {
hostname: 'api.weixin.qq.com',
port: 443,
path: '/tcb/databaseadd?access_token='+token.accessToken,
method: 'POST',
headers:{
'Content-Type' : 'application/json;charset=utf8',
'Content-Length' :contents.length
},
}
var req=https.request(options,function(res){
res.setEncoding('utf8')
res.on('data',(data)=>{
console.log("返回的内容:",data)
})
})
req.write(contents)
req.end()
}
将代码中的“西游记”、“吴承恩”改成“xiyouji”、“wuchengen”就没有任何问题,如下:
{"errcode":0,"errmsg":"ok","id_list":["b6478027-3529-464a-bcc9-0a9f49fb2c34"]}
如果是 postman 正常那就是代码的问题了,试试用 request 库直接朝 https://xxx 发请求呢,不带端口号。
postman没问题的话,说明接口和传参是正确,应该是代码的问题
楼主解决了吗
建议用JSON.stringify一下,我都是这样拼装string的,一次就通过。
let dataStr = JSON.stringify(myDoc)
let query = `db.collection("books").add({data: [${dataStr}]})`
建议抓包对比一下postman的raw http request与你用nodejs发出的http包。