Node.js 如何解决平均堆栈api项目中未定义的参考错误响应数据?
我正在尝试使用mean stack构建API,但是当我使用postman使用get请求测试端点时,我得到以下错误:Node.js 如何解决平均堆栈api项目中未定义的参考错误响应数据?,node.js,express,Node.js,Express,我正在尝试使用mean stack构建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\ex
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
};
如何在响应数据实际存在之前定义它?我很困惑,有人能解释一下我哪里出错了吗?在第一次尝试时,您的代码将在建立数据库连接之前响应。第二次会更好,因为在第一次尝试之后已经建立了db连接 数据库连接将阻止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
};
谢谢你,我已经试过了,我想我理解你的意思,尽管我遇到了另一个错误:F:\mean\api\controllers\students.controllers.js:17 dbconn.open(getStudentData);我似乎无法删除任何想法?谢谢你Peter我感谢你的帮助好消息是我通过删除结束时的大括号消除了错误,因为有太多的错误,但坏消息是它仍然不起作用,dbconn对象由于某种原因是空的?好的,我看到我更新了,修复了那个大括号。你现在遇到了什么错误?嗨@Peter Hauge,是的,dbconn对象由于某种原因是空的,它没有从dbconnection.js中得到任何东西。这可能与我使用的节点模块MSSQL有关吗?我使用的代码直接来自他们的自述文件。