node.js - 从nodejs中的数据库获取数据时的空值
问题描述
我是 nodeJS 的新手,在理解 async 和 await 的工作原理时遇到了一些问题。这是我用来从数据库中获取数据的代码:
const sql = require('mssql');
const config = require('./config');
var Student = require('./student');
module.exports.getAllStudents = async function getAllStudents(){
var studentArray = new Array();
console.log('dbconnection');
var conn = new sql.ConnectionPool(config.dbConfig[0]);
conn.connect()
.then(()=>{
var req = new sql.Request(conn);
req.query('SELECT * from student').then((recordset)=> {
var dataset = recordset.recordset;
for(var index = 0; index<dataset.length; index++){
var student = new Student(dataset[index].student_id , dataset[index].first_name, dataset[index].last_name, dataset[index].student_address , dataset[index].age);
studentArray.push(student);
}
conn.close();
}).catch( (error) =>{
console.log("An error has occured while executing your query ");
console.log(error);
});
})
.catch( (error)=> {
console.log("An error has occured while trying to connect to the database : ");
console.log(error);
});
return studentArray;
}
这是我拨打电话以获取所有学生的端点:
app.get('/getAllStudents' , function(req , res){
var studentArr = new Array();
studentArr = query.getAllStudents();
console.log('====================================');
//console.log(studentArr); //this prints undefined
//console.log('length:======' + studentArr.length);
//var json = JSON.stringify(studentArr);
res.status(200);
res.send('got all students');
})
我试图了解如何解决这个错误,需要做什么来等待我的查询得到结果然后打印学生数组。谁能向我解释需要做什么以及为什么它不起作用?
解决方案
因为它是异步的,所以你应该返回一个 Promise 然后返回resolve()
结果
const sql = require('mssql');
const config = require('./config');
var Student = require('./student');
module.exports.getAllStudents = function getAllStudents() {
return new Promise((resolve, reject) => {
var studentArray = new Array();
console.log('dbconnection');
var conn = new sql.ConnectionPool(config.dbConfig[0]);
conn.connect()
.then(()=>{
var req = new sql.Request(conn);
req.query('SELECT * from student').then((recordset)=> {
var dataset = recordset.recordset;
for(var index = 0; index<dataset.length; index++){
var student = new Student(dataset[index].student_id , dataset[index].first_name, dataset[index].last_name, dataset[index].student_address , dataset[index].age);
studentArray.push(student);
}
resolve(studentArray);
conn.close();
}).catch( (error) =>{
console.log("An error has occured while executing your query ");
console.log(error);
reject(error);
});
})
.catch( (error)=> {
console.log("An error has occured while trying to connect to the database : ");
console.log(error);
reject(error);
});
});
}
然后添加到async
您的功能和await
query.getAllStudents()
app.get('/getAllStudents' , async function(req , res){
var studentArr = new Array();
studentArr = await query.getAllStudents();
推荐阅读
- python - NameError:名称'ctx'未定义
- version-control - 如何告诉 Cargo 使用 git 标签来确定 crate 版本?
- docker - 气流日期错误 dag.normalize_schedule TypeError
- python-3.x - Colab:chromedriver 不包含在 PATH 中
- ios - 在 Portrait 状态下强制旋转 UIViewController
- python-3.x - 是否可以'不根据值打印字典?
- git - 为什么 HEAD~ 在命令提示符下成功时 HEAD^ 失败?
- ruby-on-rails - 在 Heroku 上使用 Active Storage 时 .webp 图像出错
- javascript - 淘汰赛:更新到文本框值不会更新可观察项目
- reactjs - 在 React Native 应用程序中与 mailchimp 集成