以下は、mlabでホストされているデータベースに接続する機能的なアプリケーションです。しかし、MongoClient.connectへのコールバックで定義された "db"変数が、コードの他の場所でどのようにアクセス可能であるかについて、私は混乱しています。私が見ていない接続機能の中で起こっている魔法がありますか? FYI私の変数は、自分のコードのどこか他の場所でアクセス可能なコールバックで定義されていますか?
const express = require('express');
const bodyParser = require('body-parser');
const MongoClient = require('mongodb').MongoClient
const app = express();
app.use(bodyParser.urlencoded({extended: true}));
MongoClient.connect('link-to-my-db', (err, database) => {
if (err) return console.log(err);
db = database;
app.listen(3000,() => {
console.log("Listening on 3000");
});
});
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
app.post('/quotes', (req, res) => {
// How is it possible for "db" to be accessible here even though it was defined in a separate function?
db.collection('quotes').save(req.body, (err, result) => {
if (err) return console.log(err);
console.log('saved to database');
res.redirect('/');
})
});
::私は、ノード上の入門チュートリアル次られた以下のコメントを参照してください。私は魔法のように上記のコードを書いていませんでした! http://www.w3schools.com/js/js_scope.aspを引用
はまた、[Strictモード](HTTPSを使用する場合、グローバル変数の暗黙の宣言が許可されないことに注意してください.mozilla.org/ja/docs/Web/JavaScript/Reference/Strict_mode)。 –