2016-05-20 6 views
2

次の問題は、mssql、Nodejs、Gulp、Express、およびSQL Server Expressで構成されています。 SQL Server Expressに正常にログインできました。ただし、bookRoute.jsコードスニペット(コールバックなし)を使用した場合、返される値はは未定義です。それでも、コールバックを使用するとデータが取得されます。しかし、なぜ私は理解していない。コールバックを使用していない場合の結果は未定義です。 Nodejs、Express、およびSQL Server Express

app.jsコードスニペット:コールバックせず

var config = { 
    user: 'user', 
    password: 'password', 
    server: 'localhost', 
    database: 'Books', 
    options: { 
     instance: 'SQLEXPRESS' 
    } 
}; 

sql.connect(config, function(err){ 
    console.log(err); 
}); 

bookRoute.jsコードスニペット:コールバックと

bookRouter.route('/') 
.get(function (req, res) { 
    console.log('book router'); 
    var request = new sql.Request(); 
    request.query('select * from books').then(
     function (err, recordset) { 
      console.log(recordset); 
     }) 
    .catch(function(err){ console.log(err)}); 
    }); 

bookRoute.jsコードスニペット:

bookRouter.route('/') 
.get(function (req, res) { 
    console.log('book router'); 
    var request = new sql.Request(); 
    request.query('select * from books', 
     function (err, recordset) { 
      console.log(recordset); 
     }); 
}); 

ユーザーがWebページにアクセスすると、コンソールに結果が表示されます。残念ながら、表示される唯一の結果は、コールバックを使用しない場合未定義です。

コンソール出力:コールバックせず

P:\ub\lic\library>gulp serve 
[11:08:28] Using gulpfile P:\ub\lic\library\gulpfile.js 
[11:08:28] Starting 'style'... 
[11:08:28] Starting 'inject'... 
[11:08:53] Finished 'inject' after 808 ms 
[11:08:53] Finished 'style' after 25 s 
[11:08:53] Starting 'serve'... 
[11:08:53] Finished 'serve' after 5.31 ms 
[11:08:53] [nodemon] 1.9.2 

[11:08:53] [nodemon] to restart at any time, enter `rs` 
[11:08:53] [nodemon] watching: *.js src/**/*.js 
[11:08:53] [nodemon] starting `node app.js` 

running server on port 3000 
null 
book router 
undefined 
[11:09:21] [nodemon] restarting due to changes... 
Restarting the server.....beep boop beep beep 
[11:09:21] [nodemon] restarting due to changes... 
Restarting the server.....beep boop beep beep 
[11:09:21] [nodemon] starting `node app.js` 
running server on port 3000 
null 
book router 
[ { id: 1, 
    title: 'A,B,C with Big Bird   ', 
    author: 'Michael Jacob ' }, 
    { id: 2, 
    title: 'Peter and his Petunias  ', 
    author: 'Jess Holiday ' }, 
    { id: 3, 
    title: 'The Amazing Average Guy  ', 
    author: 'Don Dillon ' } ] 

答えて

2

bookRoute.jsコードスニペット:

bookRouter.route('/').get(function (req, res) { 
console.log('book router'); 
var request = new sql.Request(); 
request.query('select * from books') 
    .then(function (recordset) { 
     console.log(recordset); 
    }) 
    .catch(function (err) { 
     console.log(err); 
    }); 
}); 

有するべきcallback.The then機能なしbookRoute.jsをコードスニペットを使用してクエリーの結果である1つの引数だけがdocumentation .Wに記述されていますヒントには、catch関数が呼び出されるとエラーが発生します。

+0

これは確認できます。 –

関連する問題