const request = require('request');
const url = 'https://api.darksky.net/{secret_key}/37.8267,-122.4233';
request({ url }, (error, { body: data }) => {
data = JSON.parse(data);
console.log(data.currently);
});
此代码段来自Andrew Mead的完整NodeJS Developer课程。我当时在弄乱代码(我没有提供秘密的API密钥),但是我很好奇,试图在一条语句中完成两行代码……特别是我想:
request({ url }, (error, { body: data }) => {
data = JSON.parse(data);
-分解响应(我使用{body:data}完成)
-JSON.parse数据
我很想知道是否有可能在响应所在的参数(第二个参数)中做这两件事。
答案 0 :(得分:0)
不优雅。解构仅旨在将现有对象的属性提取到变量中,而不是进行其他处理。通过黑客,使用第三个参数(request
未提供),可以可能使用,默认为JSON.parse
d data
:
const url = 'https://jsonplaceholder.typicode.com/todos/1';
request({ url }, (error, { body: data }, parsedData = JSON.parse(data)) => {
console.log(parsedData);
});
但这很令人困惑,不应该这样做。
另一种类似的方法,没有第三个参数,但是使用了响应对象的不存在的属性:
request({ url }, (error, { body: data, parsedData = JSON.parse(data) }) => {
console.log(parsedData);
});
但是这些只是愚蠢的把戏。在回调的第一行上解析JSON绝对是执行此类操作的 right 方法。
您可能会或可能不会觉得更优雅的另一种选择是使用节点获取。使用它,您可以改为在Response对象上调用.json()
,指示应将其解析为JSON而不是文本(对于纯文本,则应使用.text()
):
const fetch = require('node-fetch');
const url = 'https://jsonplaceholder.typicode.com/todos/1';
fetch(url)
.then(res => res.json())
.then((obj) => {
console.log(obj);
});