【发布时间】:2020-04-30 11:08:13
【问题描述】:
我正在开发 ESP32,是此设备的新手。
我目前面临以下错误。 当我尝试从 request->value().c_str() 读取数据时,串行监视器向我显示大师冥想错误错误 SS错误:
我的代码:
server.on("/register", HTTP_POST, [](AsyncWebServerRequest *request) {
request->send(200, "text/plain", Register(request->getParam("plain",true)).c_str());
});
功能:
string Register(AsyncWebParameter *request){
const size_t bufferSize = JSON_OBJECT_SIZE(1) + 250;;
StaticJsonDocument<bufferSize> data;
deserializeJson(data, request->value().c_str()); // facing issue here when request->value().c_str() is called
const char* name = data["username"];
return String("Execution complete");
}
我已经返回简单的 javascript 函数来调用 API:
function Register() {
const tosend={
"username":"Mohit",
"password":"Mohit10#",
"lastname":"mhatre",
"firstname":"Mohit"
};
const url="http://192.168.2.120/register";
fetch(url, {
method: 'post',
headers: {
// if you want to set
},
body: tosend
})
.then(
function(response) {
response.json().then(function(data) {
console.log(data);
});
}
)
.catch(function(err) {
console.log('Fetch Error :-S', err);
});
}
谁能帮我解决这个问题,我是新手,昨天就卡在这里了
【问题讨论】:
-
您不应该在访问之前检查
deserializeJson是否成功并且生成的对象有name字段吗? -
不,反序列化没有运行,只要 request->value().c_str() 被命中就会发生错误@Botje
-
request->getParam("plain",true)returnsnullptr如果提到的参数不存在。始终检查您的假设request->hasParam("plain", true))并返回值! -
是的,谢谢你成功了,参数是空的