nodejs-writeFile创建空文件

时间:2018-08-26 16:13:13

标签: node.js puppeteer

我正在尝试将我的操纵up结果写入txt,但是我无法使其工作。 txt已创建,但为空

我正在使用process.exit,但不知道这是否正确

我知道textContent不为空,因为我可以控制台记录其内容

var https = require('https');
var Q = require('q');
var fs = require('fs');
var puppeteer = require('puppeteer');

const url = 'https://www.99freelas.com.br/projects'
/*const idToScrape;
deverá receber qual a url e os parametros específicos dela */
async function genScraper() {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    await page.goto(url);

    var textContent = await page.evaluate(() => {
        const ali = Array.from(document.querySelectorAll('.result-list li'));
        return ali.map(li => li.textContent)
    });

    fs.writeFile('res.txt', textContent, (err) => {
        if (err) throw err;
    });

    const innerText = await page.evaluate(() => {
        const ali = Array.from(document.querySelectorAll('.result-list li'));
        return ali.map(li => li.innerText);
    });


    process.exit();
}
//not used
function gravaArquivo(arquivo) {
    var deferido = Q.defer();
    fs.writeFileSync('resultado.txt', arquivo, function(err) {
        deferido.resolve(true);
        console.log('aqui estou')
    });
    return deferido.promise;
}

genScraper();

3 个答案:

答案 0 :(得分:1)

fs.writeFile()是一个异步函数,因此process.exit();是在fs.writeFile完成之前执行的。

您可以用户同步writeFile版本:fs.writeFileSync(),也可以将process.exit();放在回调中:

fs.writeFile('res.txt', textContent, (err) => {
    if (err) throw err;
    process.exit();
});

答案 1 :(得分:0)

将您的fs.writeFile放到它自己的某个许诺函数中:

const writeFile = (path, data, opts = 'utf8') =>
    new Promise((res, rej) => {
        fs.writeFile(path, data, opts, (err) => {
            if (err) rej(err)
            else res()
        })
    });

然后在主要的genScraper异步函数中,您可以执行以下操作:

await writeFile('res,txt', textContent);

答案 2 :(得分:0)

以下函数将返回一个布尔结果,表示fs.writeFile的成功:

build/lib

您可以使用以下方法在const write_file = ( file, data ) => new Promise( ( resolve, reject ) => { fs.writeFile( file, data, 'utf8', error => { if ( error ) { console.error( error ); reject( false ); } else { resolve( true ); } }); }); 函数中使用它:

genScraper()

如果这不起作用,则可能是您试图在其中写入数据的文件或目录的权限问题。

如果您正在运行Linux,则可能需要使用chown来将文件或目录的所有者更改为当前用户。

或者,您可能想研究使用chmod来更改与文件关联的权限,以允许当前用户具有写权限。