2017-11-09 8 views
1

2つのファイルa.jsとb.jsがあります。ここで、a.jsはbを呼び出す単純なnode.jsスクリプトです。 jsはDiscord.jsボットです。execを使用してDiscord.js botを起動しているノードjsが正しく実行されない

a.js

const { exec } = require(‘child_process’); 
exec(‘node b.js’, (err,stdout,stderr) => { 
console.log(‘err: ‘ + err + ‘\n stdout: ‘ + stdout + ‘\n stderr:‘ + stderr); 
}); 

b.js

const Discord = require(‘discord.js’); 
const fs = require(‘fs’); 
var bot = new Discord.Client(); 
var token; 
fs.readFile(‘token.txt’,(err,data) => { 
    if(err){console.log(err); process.exit(0);} 
    token = data; 
}); 
bot.on(‘ready’,()=>{console.log(‘ready’);}); 
bot.on(‘message’, message => { 
    if(message.content == ‘ping’){ 
     message.channel.send(‘pong’); 
    } 
}); 
bot.login(token); 

私はa.jsを実行すると、出力のみが、その後

err: 
stdout: 
stderr: 

a.jsですb.jsが実行されなかったかのように表示されます。 なぜこのようなことが起きているのか、それはなぜですか? さらに、なぜ私がこれをやっているのか不思議に思われる人は、これを大きなスクリプトの一部として持っており、私はこの問題を煮詰めました。そして、主要な部分は、b.jsがexecから実行されなければならないということです。私はこれをWindows 10で実行しています。最新のバージョンのノードとDiscord.jsを使用しています。ありがとう

答えて

0

私は別のは、この時に行くが、とき、完全な不和ボットのセットアップを通じてました...

a.jsはこのようになります...

const { spawn } = require('child_process'); 

const child = spawn('node',['b.js']); 

process.stdin.pipe(child.stdin); 

child.stdout.on('data', (data) => { 
    console.log(`child stdout:\n${data}`); 
}); 

child.stderr.on('data', (data) => { 
    console.log(`child stderr:\n${data}`); 
}); 

マイb.jsが...このよう

に見えます b.js
const Discord = require('discord.js'); 
const fs = require('fs'); 
var bot = new Discord.Client(); 
var token; 
fs.readFile('token.txt', {encoding: 'utf8'}, (err,token) => { 
    if(err){console.log(err); process.exit(0);} 

    bot.on('ready',()=>{ 
      console.log('ready'); 
    }); 
    bot.on('message', message => { 
     if(message.content == 'ping'){ 
      message.channel.send('pong'); 
     } 
    }); 

    bot.login(token); 
}); 

、私は、ファイルの読み込みをutf8しなければならなかった、と私token.txtファイルがありませんでしたことを確認してください末尾の空白スペース。また、私はボットログインコードをトークンファイルのコールバックに移動しました。

以下の出力例...

enter image description here

私はそれが動作するかどうかを確認するために不和に通じPINGを送り、ボットはポンと答えました。

下記のスクリーンショット enter image description here

このコードがうまくいければ教えてください。

0

私は単に

a.jsをCONSOLE.LOGするため、私はb.jsを変え除き、b.jsでa.jsを実行しているで行くを持っていた

const { exec } = require('child_process'); 
exec('node b.js', (err,stdout,stderr) => { 
console.log('err: ' + err + '\n stdout: ' + stdout + '\n stderr:' + stderr); 
}); 

b.js

console.log("B was called"); 

次に、ノードa.jsを実行すると、次のようになります。

node .\a.js 
err: null 
stdout: B was called 

stderr: 

ここで、Aがどこから呼び出されているのかに関連してBを見つけることができないパスの問題があると思いますか?

+0

あなたがしたことをしたときに正常に動作するので、これは問題ではありません。 – BElgy

+0

心配しないで、別の答えを投稿しました。 –

関連する問題