是否有可能做到这一点? (涉及解构和重新赋值)
Is it possible to do this? (Involves destructuring and reassignment)
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);
});
此代码片段来自 NodeJS 在线课程。我在乱弄代码(我没有提供秘密 API 密钥)但我很想尝试将两行代码写成一条语句,具体来说我想:
request({ url }, (error, { body: data }) => {
data = JSON.parse(data);
-解构响应(我使用 {body: data} 完成)
-JSON.parse数据
我很好奇是否可以在响应所在的参数(第二个参数)中做这两件事。
不优雅。解构只是为了将已有对象的属性提取到变量中,而不是做额外的处理。 可能,使用 hack,通过使用第三个参数(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 绝对是 正确的 方法来做这种事情。
您可能会或可能不会发现更优雅的另一个选项是使用节点获取。有了它,您可以改为在 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);
});
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);
});
此代码片段来自 NodeJS 在线课程。我在乱弄代码(我没有提供秘密 API 密钥)但我很想尝试将两行代码写成一条语句,具体来说我想:
request({ url }, (error, { body: data }) => {
data = JSON.parse(data);
-解构响应(我使用 {body: data} 完成)
-JSON.parse数据
我很好奇是否可以在响应所在的参数(第二个参数)中做这两件事。
不优雅。解构只是为了将已有对象的属性提取到变量中,而不是做额外的处理。 可能,使用 hack,通过使用第三个参数(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 绝对是 正确的 方法来做这种事情。
您可能会或可能不会发现更优雅的另一个选项是使用节点获取。有了它,您可以改为在 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);
});