我有一个使用axios的react前端,将状态存储的对象的http请求发送到NodeJS rest api服务。我在nodejs端使用对象时遇到问题。
反应投放
submit = () => {
this.setState({ questionnaire_completed: true })
console.log("user" + this.state.user);
let url_ = process.env.REACT_APP_USER_RESTAPI + "/user_psychometrics/questionnaire?authtoken="+process.env.REACT_APP_USER_RESTAPI_KEY+"&username=" + this.state.user + "&results=" + this.state.questions
console.log("url: ", url_)
axios.put(url_).then(function (response) {
console.log(response)
}).catch(function(error){
console.log(error)
})
}
在router.put内的代码在节点上。
let user_answers = util.inspect(req.query.results, {showHidden: true, depth: null})
console.log("UA: ", user_answers)
let user_answ_keys = Object.keys(req.query.results)
console.log("uak", user_answ_keys)
user_answ_keys.forEach(function(item){
console.log(req.query.results[item])
})
Console.log屏幕截图:https://imgur.com/a/XGzjW6f
答案 0 :(得分:0)
我坚信this.state.questions
是Array
,类似于:
[ '1', '2', '3', ....., 'n']
或类似的东西,因此通过查询参数发送数组时缺少的是对其进行字符串化,所以您应该这样做:
let url_ = process.env.REACT_APP_USER_RESTAPI + "/user_psychometrics/questionnaire?authtoken="+process.env.REACT_APP_USER_RESTAPI_KEY+"&username=" + this.state.user + "&results=" + JSON.stringify(this.state.questions)
以以下示例为例:
const array = [1,2,3,4,5]
const badUrl = '/foo/bar?questions='+array
const goodUrl = '/foo/bar?questions='+JSON.stringify(array)
console.log({badUrl, goodUrl})
如您所见,/foo/bar?questions=1,2,3,4,5
是不正确的。
应该解决您的问题,另外要注意的是,如果您的util.inspect(req.query.results, {showHidden: true, depth: null})
已经在解析此数组,则可以通过其他任何方式将其更改为:
util.inspect(JSON.parse(req.query.results), {showHidden: true, depth: null})
请注意:如果您的数组不是[ '1', '2', '3', ....., 'n']
没关系,则此解决方案仍然可以使用。