2016-05-20 6 views
2

Das folgende Problem besteht aus Mssql, Nodejs, Gulp, Express und SQL Server Express. Ich kann mich erfolgreich bei SQL Server Express anmelden. Allerdings ist der zurückgegebene Wert undefined, wenn ich das bookRoute.js Code-Snippet ohne Rückruf verwenden. Wenn ich jedoch einen Rückruf verwende, erhalte ich die Daten. Allerdings verstehe ich nicht warum.Nicht definiertes Ergebnis, wenn kein Rückruf verwendet wird. Nodejs, Express und SQL Server Express

app.js Code-Schnipsel:

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

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

bookRoute.js Code-Schnipsel ohne Rückruf:

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 Code-Schnipsel mit Rückruf:

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); 
     }); 
}); 

Sobald ein Benutzer auf die Webseite zugreift, sollte die Konsole die Ergebnisse anzeigen. Leider ist das einzige Ergebnis, das angezeigt wird, undefined, wenn kein Rückruf verwendet wird.

Konsolenausgabe:

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 ' } ] 

Antwort

2

bookRoute.js Code-Schnipsel ohne Rückruf:

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); 
    }); 
}); 

Wenn bookRoute.js Code-Schnipsel ohne callback.The then Funktion sollte nur ein Argument, das das Ergebnis der Abfrage ist, ist, wie es in der documentation .W Wenn ein Fehler auftritt, wird die catch-Funktion aufgerufen.

+0

Ich kann bestätigen, dass dies funktioniert. –