我正在尝试使用平均堆栈构建 API,但是当我使用 postman 通过 get 请求测试端点时,出现以下错误:
ReferenceError: studentData is not defined
at module.exports.StudentsGetAll (F:\MEAN\api\controllers\students.controllers.js:13:11)
at Layer.handle [as handle_request] (F:\MEAN\node_modules\express\lib\router\layer.js:95:5)
at next (F:\MEAN\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (F:\MEAN\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (F:\MEAN\node_modules\express\lib\router\layer.js:95:5)
at F:\MEAN\node_modules\express\lib\router\index.js:281:22
at Function.process_params (F:\MEAN\node_modules\express\lib\router\index.js:335:12)
at next (F:\MEAN\node_modules\express\lib\router\index.js:275:10)
at Function.handle (F:\MEAN\node_modules\express\lib\router\index.js:174:3)
at router (F:\MEAN\node_modules\express\lib\router\index.js:47:12)
但是,如果发送第二个 get 请求,studentData 响应将按我想要的方式返回。我做错了什么?
Students.controllers.js
var dbconn = require('../data/dbconnection.js');
module.exports.StudentsGetAll = function( req, res) {
dbconn.open();
console.log('GET the Students');
res
.status(200)
.json(studentData);
};
Dbconnection.js
var sql = require('mssql');
var query = require('./queries.js');
var dburl = 'mssql://*****:****@**.**.*.**/******/*******';
function open() {
var conn = new sql.Connection(dburl);
var req = new sql.Request(conn);
conn.connect(function (err) {
if (err) {
console.log(err);
return;
}
console.log("Database Connection established");
req.query(query.getAllQuery, function (err, recordset) {
if (err) {
console.log(err);
}
else {
studentData = recordset;
}
});
});
}
module.exports = {
open : open
};
如何在响应数据实际存在之前定义它?我很困惑,谁能解释一下我哪里出错了?
最佳答案
在第一次尝试期间,您的代码将在数据库连接建立之前做出响应。第二次效果会更好,因为第一次尝试后已经建立了数据库连接。
数据库连接将阻塞 I/O。这意味着您应该实现一个回调函数,在连接建立后执行,然后用检索到的数据进行响应。
我会将 Students.controllers 重写为以下内容:
// Students.controllers.js
var dbconn = require('../data/dbconnection.js');
module.exports.StudentsGetAll = function( req, res) {
var getStudentData = function(studentData){
res
.status(200)
.json(studentData);
};
dbconn.open(getStudentData);
console.log('Getting Students Records');
}
//Dbconnection.js
var sql = require('mssql');
var query = require('./queries.js');
var dburl = 'mssql://*****:****@**.**.*.**/******/*******';
function open(callback) {
var conn = new sql.Connection(dburl);
var req = new sql.Request(conn);
conn.connect(function (err) {
if (err) {
console.log(err);
callback({error: err}); // Respond back with error
return;
}
console.log("Database Connection established");
req.query(query.getAllQuery, function (err, recordset) {
if (err) {
console.log(err);
callback({error: err}); // Respond back with error
}
else {
// Added Callback
callback(recordset); // Respond back with data set
}
});
});
}
module.exports = {
open : open
};
关于node.js - 如何解决 MEAN stack api 项目中 undefined reference 错误响应数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43279609/