実行しようとしている非常に単純な「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 行のコードを移動することによって生じる違いについて、誰かが光を当てることができますか? 別の関数がデータベースにアクセスするたびに、新しい接続を作成する必要がありますか?