【发布时间】:2021-09-27 20:25:38
【问题描述】:
我正在使用 Node.js 并将其连接到 MySQL。
我的问题是,SELECT 查询没有返回结果。我使用了INSERT 查询,它运行良好!
对于SELECT的查询问题。
我想要一个单独的文件,其中包含对 MySQL 数据库执行查询的函数。该文件是 database.js,其中包含以下代码:
exports.connectionParams = {
host: 'localhost',
user: 'root',
password: '*****',
database: 'savitri_dev'
}
exports.getSchoolIdByName = (con, schoolName, callback) => {
let sql = `SELECT id FROM School WHERE designation = '${schoolName}';`;
console.log(sql);
con.query(sql, (queryErr, result) => {
if (queryErr) throw queryErr;
callback(result[0].id);
//return result[0].id;
});
};
现在,我调用查询的文件是 new_client.js(它是一个路由文件):
var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var db = require('../bin/database');
router.get('/', (req, res, next) => {
//res.send('respond with a resource');
res.render('new_client', {
title: 'Clients - Add New Client',
angular_app_name: 'clientsModule',
angular_controller_name: 'AddClientController'
});
});
router.put('/', (req, res, next) => {
const dbConnection = mysql.createConnection(db.connectionParams);
let data = req.body;
let studentsDataList = [];
console.log(data.studentsData);
[...data.studentsData].forEach((s) => {
const schoolId = db.getSchoolIdByName(dbConnection, s.school, function(result) {
console.log(result);
console.log((result != null || result != undefined));
return parseInt(result);
});
console.log(schoolId);
studentsDataList.push([
s.name,
s.year,
schoolId,
s.course,
s.mainVoucherCode,
s.megaIdentifier
]);
});
console.log(studentsDataList);
});
module.exports = router;
我不明白问题是什么。此代码运行时没有错误,并作为输出:
[
{
name: 'M David',
year: '3',
school: 'Escola EB1,2,3/JI Quinta Nova da Telha',
course: '',
mainVoucherCode: '',
megaIdentifier: ''
}
]
SELECT id FROM School WHERE designation = 'Escola EB1,2,3/JI Quinta Nova da Telha';
undefined
[ [ 'M David', '3', undefined, '', '', '' ] ]
null
false
如您所见,我想做的是,对于列表中的每个元素,我想从数据库中获取 id 并将其添加到新列表中。
我已经尝试了很多不同的想法。
我已经尝试使用 async|await 函数和 Promise:
database.js
(...)
exports.getSchoolIdByName_new = (con, schoolName) => {
return new Promise((resolve, reject) => {
con.query(`SELECT id FROM School WHERE designation = '${schoolName}';`, (queryErr, result) => {
return queryErr ? reject(err) : resolve(result[0].id);
});
});
};
(...)
new_client.js
(...)
[...data.studentsData].forEach((s) => {
(async () => {
dbConnection.connect();
const schoolId = await db.getSchoolIdByName(dbConnection, s.school);
console.log(schoolId);
dbConnection.end();
});
console.log(schoolId);
studentsDataList.push([
s.name,
s.year,
schoolId,
s.course,
s.mainVoucherCode,
s.megaIdentifier
]);
});
console.log(studentsDataList);
(...)
输出
[
{
name: 'M David',
year: '9',
school: 'Escola EB2,3 D. João I',
course: '',
mainVoucherCode: '',
megaIdentifier: ''
}
]
PUT /clients-add-client 500 172.545 ms - 11532
我也尝试不使用来自另一个文件的查询 - 即,在 new_client.js 的 forEach 中使用它:
new_client.js
(...)
[...data.studentsData].forEach((s) => {
dbConnection.query(`SELECT id FROM School WHERE designation = '${s.school}';`, (queryErr, result) => {
if (queryErr) throw queryErr;
const schoolId = result[0].id;
});
console.log(schoolId);
studentsDataList.push([
s.name,
s.year,
schoolId,
s.course,
s.mainVoucherCode,
s.megaIdentifier
]);
});
console.log(studentsDataList);
(...)
这给了我相同的500 输出:PUT /clients-add-client 500 172.545 ms - 11532
我不知道接下来该尝试什么。
【问题讨论】:
标签: javascript mysql node.js