Доступ к данным в объекте через HTTP-запрос put - PullRequest
1 голос
/ 22 мая 2019

У меня есть реагирующий внешний интерфейс, использующий axios для отправки http-запроса объекта, сохраненного в состоянии, в службу API отдыха NodeJS.У меня возникли проблемы с использованием объекта на стороне nodejs.

React Put

    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 голосов
/ 22 мая 2019

Я твердо верю, что 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'], не имеет значения, это решение должно работатьв любом случае.

...