Tous les scripts sur mon serveur sont sur PHP, mais une tâche est possible de résoudre uniquement avec node.js.
nœud.js obtient la liste des URL à partir de la base de données, obtient du contenu de chaque page et l'écrit aux fichiers. Après ce nœud.js appelle le script php, qui fonctionne avec des fichiers sauvegardés. P> mais le problème est lorsque vous appelez les scripts locaux, tous les fichiers n'ont pas été enregistrés. P > ps Il faut la plupart du temps pour obtenir et enregistrer du contenu derrière les URL, mais ne pas prendre peu de lignes de la base de données. P> p>
3 Réponses :
Vous devez attendre que la DB termine sa tâche, puis appelez le script local. Pour ce faire, vous pouvez encapsuler tout le code DB dans une promesse et appeler le script lorsqu'il est terminé (à l'intérieur du Une autre option définirait une fonction de rappel et appeler le script local une fois la requête DB terminée. p> puis () code> de la promesse). P>
La meilleure solution possible pour de tels problèmes est d'utiliser ps: je n'ai pas pu avoir une chance Pour tester cela, vous pouvez avoir besoin de modification. P> espère que cela aide :) p> p>
Le plaisir d'aider .. espérons que c'était utile :)
Deux remarques: la base de données de requête nécessite également du temps; et j'utilise un autre module const util = require('util');
const mysql = require('mysql');
const filesystem = require('fs');
const requestPromise = require('request-promise');
const database = mysql.createConnection({/*options*/});
const query = util.promisify(database.query).bind(database);
(async () => {
try {
const pages = await query('SELECT * FROM pages');
//console.log(pages);
for (let key of Object.keys(pages)){
const page = pages[key]
const url = "https://www.website.com/" + page.url
const options = {
uri: url,
transform: function(body) {return body},
}
const html = await requestPromise(options)
const writeResponse = await filesystem.writeFile(page.id + '.html', html, function(err){if (err){console.log(err)}})
}
} finally {
database.end();
//console.log('all files have been saved')
requestPromise({uri: 'http://127.0.0.1/parse_with_php'})
process.exit()
}
})()
Enveloppez toutes vos procédures (comme écrire un fichier unique) dans une fonction asynchaire, puis
attendre code>, c'est tout