Node.js将变量的类型从“对象”更改为“未定义”

时间:2020-10-19 23:47:03

标签: javascript node.js

我正在尝试从Node.js Expressjs进行API调用。 API调用工作正常,但是在解析对JSON的响应后,当我尝试访问其他字段时,它给我一个错误。 我尝试记录要控制台的JSON对象的一个​​元素的类型。首先显示对象,然后显示未定义(或者如果尝试记录内容本身,则会给我一个错误)。

var request = require('request');

const app = express();


 //For serving static pages
// app.use(express.static('./static'))
app.get('/', (req, res) =>{
    res.send('You have successfully contacted the API')
});

app.get('/:ticker', (req, res) => {
    var requestOptions = {
        'url': 'https://api.tiingo.com/tiingo/daily/' + req.params.ticker + '/prices?startDate=2019-01-02&token=74e7c9d22c2ffe8e9b5643edc2ef48bbddc6e69e',
        'headers': {
            'Content-Type': 'application/json'
            }
    };
    
    request(requestOptions,
        function(error, response, body) {
            result = JSON.parse(body);
            console.log('The type is ' + typeof (result[0].date)) //This statement prints different results twice
            res.send(result);
            
        }
    );   
});

app.listen(process.env.PORT || 3000)

终端说:

The type is string

D:\Web Dev Bootcamp\NodeJS-Tutorial\index.js:24
            console.log('The type is ' + typeof (result[0].date))
                                                           ^

TypeError: Cannot read property 'date' of undefined
    at Request._callback (D:\Web Dev Bootcamp\NodeJS-Tutorial\index.js:24:60)
    at Request.self.callback (D:\Web Dev Bootcamp\NodeJS-Tutorial\node_modules\request\request.js:185:22)
    at Request.emit (events.js:314:20)
    at Request.<anonymous> (D:\Web Dev Bootcamp\NodeJS-Tutorial\node_modules\request\request.js:1154:10)
    at Request.emit (events.js:314:20)
    at IncomingMessage.<anonymous> (D:\Web Dev Bootcamp\NodeJS-Tutorial\node_modules\request\request.js:1076:12)
    at Object.onceWrapper (events.js:420:28)
    at IncomingMessage.emit (events.js:326:22)
    at endReadableNT (_stream_readable.js:1223:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) [nodemon] app crashed - waiting for file changes before starting...

2 个答案:

答案 0 :(得分:2)

运行快速console.log(result)以确保将结果存储为数组。我怀疑您在解析JSON时会将结果存储为对象。

答案 1 :(得分:-1)

找出问题所在。实际上,express本身是在请求favicon.ico,在该请求期间,结果变量显然未定义。我只是按照建议[此处] [1]设置了另一条处理favicon请求的途径。现在,代码只需记录一次结果,就可以正确访问JSON对象的字段。

编辑:如贡献者所指出,其浏览器即是在发出收藏图标的请求,而并非“表达”。 [1]:Node Express "favicon.ico" not found error