我的服务器上的所有脚本都基于 PHP,但一项任务只能使用 Node.js 来解决。
Node.js 从数据库获取 URL 列表,获取每个页面的内容并将其写入文件。之后,Node.js 调用 PHP 脚本,该脚本可处理保存的文件。
const filesystem = require('fs');
const requestPromise = require('request-promise');
const mysql = require('mysql');
const database = mysql.createConnection({});
database.connect(function(err){
if (err){throw err}
database.query('SELECT * FROM pages', function(err, result) {
if (err){throw err}
Object.keys(result).forEach(function(key){
let page = result[key];
let url = "https://www.website.com/" + page.url
requestPromise({})
.then((html) => {
filesystem.writeFile(page.id + '.html', html, function(err){
if (err){return console.log(err)}
});
})
.catch((err) => {console.log(err)})
})//foreach
})
})//database.connect
//only after all files have been got and filled!
requestPromise({uri: 'http://127.0.0.1/parse_with_php'})
但问题是调用本地脚本时,并没有保存所有文件。
附注获取和保存 URL 后面的内容需要花费大部分时间,但不会从数据库中获取几行。
最佳答案
您应该等待数据库完成其任务,然后调用本地脚本。为此,您可以将所有数据库代码封装到 Promise 中,并在完成时调用脚本(在 Promise 的 then()
内)。
另一个选项是设置回调函数并在数据库查询完成后调用本地脚本。
关于javascript - 仅在获取所有文件后执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57594047/