通过http put请求访问对象中的数据

时间:2019-05-21 22:57:53

标签: node.js reactjs axios router

我有一个使用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

1 个答案:

答案 0 :(得分:0)

我坚信this.state.questionsArray,类似于:

[ '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']没关系,则此解决方案仍然可以使用。