我正在尝试从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...
答案 0 :(得分:2)
运行快速console.log(result)以确保将结果存储为数组。我怀疑您在解析JSON时会将结果存储为对象。
答案 1 :(得分:-1)
找出问题所在。实际上,express本身是在请求favicon.ico,在该请求期间,结果变量显然未定义。我只是按照建议[此处] [1]设置了另一条处理favicon请求的途径。现在,代码只需记录一次结果,就可以正确访问JSON对象的字段。
编辑:如贡献者所指出,其浏览器即是在发出收藏图标的请求,而并非“表达”。 [1]:Node Express "favicon.ico" not found error