LoginSignup
1
1

More than 1 year has passed since last update.

Discord.js+Expressでグローバル変数っぽい挙動をしたいメモ

Posted at

Discord.js+expressでサーバーを立ててますが、ファイル分割をしている末端のファイルhoge.jsなどのなかでDiscord.jsのClientを呼び出したいというニッチな話

main.js
|- actions
|- router
    |- hoge.js

main.jsでclient = new Client()をしていますが、末端でhoge.jsではclientオブジェクトが定義されてなく、client.channels.cache.get().send()を使いたいけど使えない、みたいな状態でした。

main.jsで定義したclient変数をhoge.jsに持っていきたいなというところでしたが、公式ドキュメントとすぎゃーんさんの記事が参考になりました。

Express アプリケーションで使用するミドルウェアの作成
expressでapp全体の設定値をroutesで使う(module間で変数を受け渡す)方法いろいろ

結論: ミドルウェア関数とreqを利用

色々なやり方ある模様ですが、一旦このやり方で落ち着きました。

main.js内でミドルウェア関数を作成し、req.discordClientを定義してclientを可能しておきます。

main.js
//省略

const client = new Client(); //(色々端折っているけど)

const myConfig = function (req, res, next) {
    req.discordClient = client;
    next();
}

app.use(myConfig);

//省略

これで他の箇所で呼び出すreqオブジェクトでreq.discordClientが利用できるようになりました。

hoge.js
module.exports = async (req, res) => {

	// Discord BotのClientオブジェクト
	const client = req.discordClient;
	`client.channels.cache.get(<discord_room_id>).send('ほげほげ');`
}

終わってみるとあっけないですが歴史がある分色々なやり方が紹介されていてなかなか調べにくかったですね......

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1