6

実行しようとしている非常に単純な「server.js」セットアップがあります。

var express = require('express'),
    wines = require('./routes/testscripts');

var app = express();

app.get('/first_test', wines.popSingleData);

app.listen(3000);
console.log('Listening on port 3000...');

これは接続するように設定されていますlocalhost:3000

に移動するとlocalhost:3000/first_test、testscript.js 内で「popSingleData」メソッドが呼び出されます。

...
    var mongoose = require('mongoose');

    mongoose.connect('mongodb://localhost/test');

    var db = mongoose.connection;

    console.log('include called');

exports.popSingleData = function(req, res) {

//  var mongoose = require('mongoose');

//  mongoose.connect('mongodb://localhost/test');

//  var db = mongoose.connection;

    console.log('function called');

    db.on('error', console.error.bind(console, 'connection error:'));
    console.log('error handler set');
    db.once('open', function callback () {
        //yay!
        console.log("DB Opened");

        var someSchema = require('../models/someSchema');

        someSchema.find(function (err, found){
            if (err) 
            {
                console.log('err');
            }

            if(found.length != 0) 
            {
                console.log("Found Data:");
                console.log(found);
                for( var i = 0; i < found.length; i++)
                {
                    res.jsonp((found[i]));
                }
            }
        });


    });

};
...

問題を引き起こしている行は最初の 3 行です。

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;

それらが関数内で宣言されると、スクリプトは期待どおりに実行され、データベースから見つかった JSON オブジェクトが出力されます。それらが testscript.js 内で定義されているが、 method の範囲外にある場合、プログラムはdb.once('open', function callback () {...}); command.

これらの 3 行のコードを移動することによって生じる違いについて、誰かが光を当てることができますか? 別の関数がデータベースにアクセスするたびに、新しい接続を作成する必要がありますか?

4

1 に答える 1