无法访问props对象内部的值

时间:2019-05-11 15:32:19

标签: javascript reactjs object

我无法访问年和月变量中的值,因为它返回了一个对象。

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 个答案:

答案 0 :(得分:3)

如果调用toString(),则无法访问该值,因为year不再是对象。

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

尝试不使用toString()

答案 1 :(得分:0)

通过删除变量周围的括号来解决。

已更改

   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中获得了实际值,而不是对象。