Javascript node.js如何使用fs获取收到的api结果
我是node.js的新手。在这里,我试图用收到的resultresponse.body创建一个txt文件。但它只是打印了一个例外。 我需要你的帮助Javascript node.js如何使用fs获取收到的api结果,javascript,node.js,rest,Javascript,Node.js,Rest,我是node.js的新手。在这里,我试图用收到的resultresponse.body创建一个txt文件。但它只是打印了一个例外。 我需要你的帮助 function fetch(){ const got = require('got'); got('https://www.google.com', { json: true }).then(response => { console.log(response.body); temp = response.body;
function fetch(){
const got = require('got');
got('https://www.google.com', { json: true }).then(response => {
console.log(response.body);
temp = response.body;
}).catch(error => {
console.log(error.response.body);
});
};
setInterval(fetch, 10000);
const fs = require('fs');
fs.write('demo3.txt', response.body, { flag: "a"}, function(err){
if(err){
return console.log(err);
}
});
三个问题:
1-temp和response.body都在fetch函数内,因此不能在外部使用
2-您对异步操作的处理不正确。虽然setInterval将使提取延迟10秒,但对文本文件的写入仍将立即运行
3-在文件末尾使用异步文件写入方法。IIRC程序将在完成之前终止
一个简单的解决方案是在fetch之外创建一个变量来存储值,运行fetch,然后让写入操作延迟10秒
但是,在继续之前等待异步操作完成的任意时间量并不理想
如果您愿意使用ES2017/ES8,我建议使用以下代码:
const got = require('got');
const fs = require('fs');
async function fetch() {
const response = await got('https://www.google.com');
return response.body;
};
fetch().then(body => fs.writeFileSync('./demo3.txt', body));
PS!我从got中删除了选项{json:true},因为google.com似乎只能返回html。不确定这对你想做的事情是否重要
如果您不熟悉语法:
async-声明一个异步操作。它可以直接用作文件末尾的承诺,也可以用作可观察的承诺
wait-通知程序暂停代码执行,直到同一行上的异步操作解决为止。在这种情况下,操作将等待google.com的响应
writeFileSync-将其从write更改为确保处理器在终止前等待进程完成。这可能是必需的,也可能不是必需的,这取决于您在什么情况下运行此程序。三个问题:
1-temp和response.body都在fetch函数内,因此不能在外部使用
2-您对异步操作的处理不正确。虽然setInterval将使提取延迟10秒,但对文本文件的写入仍将立即运行
3-在文件末尾使用异步文件写入方法。IIRC程序将在完成之前终止
一个简单的解决方案是在fetch之外创建一个变量来存储值,运行fetch,然后让写入操作延迟10秒
但是,在继续之前等待异步操作完成的任意时间量并不理想
如果您愿意使用ES2017/ES8,我建议使用以下代码:
const got = require('got');
const fs = require('fs');
async function fetch() {
const response = await got('https://www.google.com');
return response.body;
};
fetch().then(body => fs.writeFileSync('./demo3.txt', body));
PS!我从got中删除了选项{json:true},因为google.com似乎只能返回html。不确定这对你想做的事情是否重要
如果您不熟悉语法:
async-声明一个异步操作。它可以直接用作文件末尾的承诺,也可以用作可观察的承诺
wait-通知程序暂停代码执行,直到同一行上的异步操作解决为止。在这种情况下,操作将等待google.com的响应
在writeSync终止进程之前,请确保-writeSync将等待该进程完成。这可能是必需的,也可能不是必需的,这取决于您在什么情况下运行此程序。由于您是nodeJS新手,您需要了解回调函数的概念。这里的“got”是一个回调函数。与其他类型的脚本不同,NodeJs不会等待fetch完成,而是向前移动并执行其余语句。您的代码有一些错误 变量“temp”、“response”的作用域-在执行fs.write时,response.body仍处于未定义和未声明状态。因为提取函数尚未执行 您发送了一个参数{json:true},该参数尝试以json格式获取响应。但是请求的URL使用普通文本文档/HTML文档进行答复。因此,删除该参数肯定会有所帮助
const fs = require('fs');
const got = require('got');
function fetch(){
got('https://www.google.com' ).then(response => {
console.log("Response");
temp = response.body;
fs.writeFile('demo3.txt', temp , { flag: "a"}, function(err){
if(err){
return console.log(err);
}
});
}).catch(error => {
console.log(error);
});
};
fetch();
此处,fs.write将在“get”函数通过返回响应变量完成其执行后执行。这里我还删除了参数{json:true},因为响应不是json格式。由于您是nodeJS新手,您需要了解回调函数的概念。这里的“got”是一个回调函数。与其他类型的脚本不同,NodeJs不会等待fetch完成,而是向前移动并执行其余语句。您的代码有一些错误 变量“temp”、“response”的作用域-在执行fs.write时,response.body仍处于未定义和未声明状态。因为提取函数尚未执行 您发送了一个参数{json:true},该参数尝试以json格式获取响应。但是请求的URL使用普通文本文档/HTML文档进行答复。因此,删除该参数肯定会有所帮助。
此处,fs.write将在“get”函数通过返回响应变量完成其执行后执行。这里我还删除了参数{json:true},因为响应不是json格式。任何时候你想说打印一个异常,你也应该粘贴该异常,并在代码中指出相关的行。@Amadan异常是什么非常清楚。response.body的作用域是get调用的.then。您无法在fs中访问它。write@Luca当前位置即使很清楚,这也是常见的礼貌。也许我困了,错过了显而易见的事情。也许不太清楚。人们应该尽可能多地提供诊断信息。不这样做无异于去医生办公室说“猜猜看!”!任何时候你想说打印一个异常,你也应该粘贴该异常,并在代码中指出相关的行。@Amadan异常是什么是非常清楚的。response.body的作用域是get调用的.then。您无法在fs中访问它。write@Luca当前位置即使很清楚,这也是常见的礼貌。也许我困了,错过了显而易见的事情。也许不太清楚。人们应该训练自己提供尽可能多的诊断信息。不这样做无异于去医生办公室说“猜猜看!”!虽然这个代码片段可以解决这个问题,但它没有解释为什么或者如何回答这个问题。请注意,这确实有助于提高你文章的质量。虽然这个代码片段可以解决这个问题,但它没有解释为什么或者如何回答这个问题。请,因为这确实有助于提高你的文章质量。