Не могу получить доступ к значению внутри объекта props - PullRequest
0 голосов
/ 11 мая 2019

Я не могу получить доступ к значению внутри переменных года и месяца, так как он возвращает объект.

getClassStatus () {
        var year = (this.props.year).toString();
        var month = (this.props.month).toString();
        var day = this.props.day;
        request
            .get('example.com/getRosterCount')
            .query({ year: {year} })
            .query({ month: {month} })
            .query({ day: {day} })
            .query({ time: 10 })
            .end((err, resp) => {
                if (!err) {
                    switch (resp.text) {
                        case "6":
                            this.setState({ status: 'full' });
                            break;
                        case "closed": 
                            this.setState({ status: 'closed' });
                            break;
                        case "booked":
                            this.setState({ status: 'booked' });
                            break;
                        default:
                            this.setState({ status: 'available' });
                            break;
                    }
                }
            });
    }

Я попытался получить доступ к значению, как и для любого другого объекта.

Например.

var year = (this.props.year).toString(); // {year: '2019'}

console.log(year.year); // undefined

Но он всегда возвращает undefined

Как я могу получить доступ к этому значению?

Редактировать: Вот код на стороне сервера

app.get('/getRosterCount', (req, res) => {
    var year = req.query.year; // {year: '2019'}
    var month = req.query.month; // {month: '5'}
    var day = req.query.day;
    var time = req.query.time;

    console.log(year, month, day, time);

    // Add padding to month and day if needed so they always have 2 digits
    if (month.length == 1) {
        month = "0"+month;
    }

    if (day.length == 1) {
        day = "0"+day;
    }

    var dateString = year+'-'+month+'-'+day;

    pool.getConnection(function (err, connection) {
        if (err) throw err;
        connection.query("SELECT _fkUserID FROM roster WHERE (date = ? AND time LIKE ?) OR (date = ? AND time = ?)", 
        [
            dateString,
            time+'%',
            dateString,
            time
        ],
        function(error, rows, fields) {
            if (error) {
                console.log(error);
            }
            else {
                console.log(rows);
                console.log(rows.length);
                res.set('Content-Type', 'text/plain');
                res.send(rows.length.toString());
                console.log(this.sql);
            }
        });

        connection.release();
    });
});

Запрос никогда не проходит, потому что он заканчивается так:

SELECT _fkUserID FROM roster WHERE (date = '[object Object]-[object Object]-[object Object]' AND time LIKE '10%') OR (date = '[object Object]-[object Object]-[object Object]' AND time = '10')

Ответы [ 2 ]

3 голосов
/ 11 мая 2019

Если вы позвоните toString(), вы не сможете получить доступ к значению, потому что year больше не является объектом.

// obj.toString() === '[object Object]'

Попробуйте без toString().

0 голосов
/ 13 мая 2019

Исправлено снятием скобок вокруг переменной.

Изменено

   request
        .get('example.com/getRosterCount')
        .query({ year: {year} })
        .query({ month: {month} })
        .query({ day: {day} })

до

    request
        .get('example.com/getRosterCount')
        .query({ year: year })
        .query({ month: month })
        .query({ day: day })

Теперь я получаю фактическое значение в URL, а не в объекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...