Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //I first wrote the migrate script something like this with a forEach.
- //And thought that it, itself was not blocking:
- import mysql from 'mysql';
- import mongo from 'mongodb';
- import assert from 'assert';
- import argv from 'yargs';
- import async from 'async';
- import config from './config.json';
- const url = config.mongodb;
- const MongoClient = mongo.MongoClient;
- let databases = config.databases;
- let neededFields= config.neededFields;
- let settings = new Array();
- let posts = new Array();
- let mongo_posts = null
- let mongo_settings = null
- let mongodb = null
- function complete(){
- console.log( 'complete');
- mongo_settings.insert(settings, (err, result)=>{
- mongo_posts.insert(posts, (err, result)=>{
- mongodb.close();
- })
- });
- }
- function syncSettings(){
- databases.forEach( (database ) => {
- console.log( database );
- let connection = mysql.createConnection({
- host: config.host,
- user: config.user,
- password: config.password,
- database: database
- });
- connection.connect();
- connection.query("select * from wp_options ", (err, rows, fields) => {
- console.log( "select * from wp_options ");
- let domain_setting = {}
- if(!err){
- rows.forEach( (item,index) => {
- if( neededFields.find( ( x ) => x == item['option_name'] )){
- if( item['option_name'] == 'siteurl')
- domain_setting['domain'] = item['option_value'].replace(/.*?:\/\//g, "");
- else
- domain_setting[item['option_name']] = item['option_value'];
- }
- });
- settings.push(domain_setting);
- }
- connection.query("select * from wp_posts ", (err, rows, fields) => {
- console.log( "select * from wp_posts ");
- if(!err){
- rows.forEach( (item,index) => {
- try{
- let insertObj = {};
- insertObj['post_name']= item['post_name'];
- insertObj['post_title'] = item['post_title'];
- insertObj['post_content']= item['post_content'].replace(/\r\n/g, '<br />');
- insertObj['post_date']= item['post_date'];
- insertObj['post_modified'] = item['post_modified'];
- insertObj['post_status'] = item['post_status'];
- insertObj['post_status'] = item['post_status'];
- insertObj['domain'] = domain_setting['domain']
- posts.push(insertObj)
- }catch(e){
- console.error( e );
- process.exit(1);
- }
- });
- }
- });
- });
- console.log('end')
- connection.end();
- });
- complete();
- }
- MongoClient.connect(url, (err, db) => {
- assert.equal(null, err);
- mongodb = db;
- console.log("Connected correctly to server");
- mongo_posts = db.collection('posts')
- mongo_settings = db.collection('settings')
- syncSettings();
- });
- //But then I figured out why this version here works correctly
- import mysql from 'mysql';
- import mongo from 'mongodb';
- import assert from 'assert';
- import argv from 'yargs';
- import async from 'async';
- import config from './config.json';
- // Connection URL
- const url = config.mongodb;
- const MongoClient = mongo.MongoClient;
- let databases = config.databases;
- let neededFields= config.neededFields;
- let settings = new Array();
- let posts = new Array();
- let mongo_posts = null
- let mongo_settings = null
- let mongodb = null
- function complete(){
- mongo_settings.insert(settings, (err, result)=>{
- mongo_posts.insert(posts, (err, result)=>{
- mongodb.close();
- })
- });
- }
- function syncSettings(){
- async.eachSeries( databases, ( database, next ) => {
- let connection = mysql.createConnection({
- host: config.host,
- user: config.user,
- password: config.password,
- database: database
- });
- connection.connect();
- connection.query("select * from wp_options ", (err, rows, fields) => {
- let domain_setting = {}
- if(!err){
- rows.forEach( (item,index) => {
- if( neededFields.find( ( x ) => x == item['option_name'] )){
- if( item['option_name'] == 'siteurl')
- domain_setting['domain'] = item['option_value'].replace(/.*?:\/\//g, "");
- else
- domain_setting[item['option_name']] = item['option_value'];
- }
- });
- settings.push(domain_setting);
- }
- connection.query("select * from wp_posts ", (err, rows, fields) => {
- if(!err){
- rows.forEach( (item,index) => {
- try{
- let insertObj = {};
- insertObj['post_name']= item['post_name'];
- insertObj['post_title'] = item['post_title'];
- insertObj['post_content']= item['post_content'].replace(/\r\n/g, '<br />');
- insertObj['post_date']= item['post_date'];
- insertObj['post_modified'] = item['post_modified'];
- insertObj['post_status'] = item['post_status'];
- insertObj['post_status'] = item['post_status'];
- insertObj['domain'] = domain_setting['domain']
- posts.push(insertObj)
- }catch(e){
- console.error( e );
- process.exit(1);
- }
- });
- }
- connection.end();
- next();
- });
- });
- }, complete );
- }
- MongoClient.connect(url, (err, db) => {
- assert.equal(null, err);
- mongodb = db;
- console.log("Connected correctly to server");
- mongo_posts = db.collection('posts')
- mongo_settings = db.collection('settings')
- syncSettings();
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement