我正在学习NodeJS,遇到一个基本问题。我正在尝试逐行读取文件,并且读取的每一行都向/ + <the line>
发送HTTP请求,例如:
wlist.txt内容
line
line2
尝试失败:
const request = require('request') // for http request later
const readline = require('readline')
const fs = require('fs')
function fileLoader() {
const readInterface = readline.createInterface({
input: fs.createReadStream('C:\\etc\\code\\req\\wlist.txt'),
});
readInterface.on('line', function(line) {
return "test";
});
}
var aba = fileLoader();
console.log(aba); // undefined
我将fileLoader作为函数而非“按原样”插入的逻辑是,我后来有了一个开关盒,该开关盒将文件加载用于不同的目的(例如XML请求或JSON请求)。
switch (myArgs[0]) {
case 'json':
let myJSON = {username: 'val'};
request({
url: "http://192.168.1.2:3000",
method: "POST",
json: true,
body: myJSON
}, function (error, response, body){
console.log(response.headers)
console.log(response.body)
});
break;
case 'xml': .....
我完全知道我缺少一些东西,可能是关于异步/诺言或其他任何东西,但是要真正地进行教育,请有人对我轻松一点,向我展示一下方法吗?我已经尝试了一切,只是无法理解问题所在。.
答案 0 :(得分:1)
我相信您想做这样的事情: https://gist.github.com/EB-BartVanVliet/533d55eb17c97f2a12ed25f479786f4a
基本上我要做的是:
答案 1 :(得分:0)
您可以这样简单:
var sendRequest = function (input) {
// Do whatever you want here
}
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('path_to_your_file')
});
lineReader.on('line', function (line) {
console.log('Line from file:', line);
sendRequest(line);
});
答案 2 :(得分:0)
readline是异步的,因此有可能在fileLoader完成之前调用console.log。如果您愿意在读取文件时进行阻止,请尝试使用readline-sync。
否则,您应该重新编写,以便on('line',...)方法在读取行时执行您要对行执行的操作。 (我想这就是您想要的-“逐行读取文件,并且每读取一行以发送HTTP请求”)。例如
on('line', (input) => { /* perform send http stuff/call function to do it */ } );
或者,如果您只想在读取整个文件时采取措施,则必须重新组织结构,以便将读取的文件包装在promise中(或使用async / await)。