我正在尝试从 sql server 数据库获取数据(我正在使用 mssql 模块来执行此操作: https://www.npmjs.com/package/mssql )并将其发送到 Redis。 所以我创建了三个文件:
- sql_server.js包含与sql_server相关的所有功能(例如连接数据库和查询)
- redis.js有连接、给redis数据库设置key/value等功能(key是ID,value是sql_server查询的结果)
- server.js是调用sql_server和redis文件的函数并充当 Controller 的主文件
我想流式传输 sql_server 数据库并将返回的每一行的结果发送到 server.js。 然后 server.js 文件将结果传递给 redis 函数,该函数将创建键/值对。
但是我对node.js不是很熟悉,我不知道如何将每一行的查询结果返回到server.js:
这里是sql_server.js函数来流式传输数据库
execRequests: function(requestEntry, flux){
try{
const request = new sql.Request(pool)
request.stream = true // You can set streaming differently for each request
request.query(requestEntry)// or request.execute(procedure)
request.on('recordset', columns => {
//console.log(columns);
})
request.on('row', row => {
// THAT I AM DOING FOR NOW
//redisMethods.setValue(JSON.stringify(row), flux);
// THAT I WOULD LIKE TO TO
//return row;
})
request.on('error', err => {
// May be emitted multiple times
})
request.on('done', result => {
console.log("done for flux :" + flux);
})
} catch (err){
console.log(err);
}
}
这是server.js
sqlMethods.connection().then(function(pool){
try{
if(pool._connected){
console.log("Connected to SQL Server database : " + pool.config.database);
// connection to redis database
redisMethods.connection();
// get the requests to execute
sqlMethods.getRequests().then(function(requestArray){
// loop over the array containing requests
for (var i in requestArray){
let request = requestArray[i].requete; //extract the request
let flux = requestArray[i].flux; //extract the flux name
sqlMethods.execRequests(request, flux).then(function(result){
// redisMethods.setValue(JSON.stringify(result), flux);
});
}
});
}
} catch (err){
console.log(err);
}
希望我的解释是可以理解的,我需要您的帮助来找到一种将行从 sql_server.js 返回到 server.js 的方法。 谢谢!
最佳答案
我可以建议您使用回调函数来传递错误或数据。
execRequests: function(requestEntry, flux, callback){
const request = new sql.Request(pool);
request.stream = true; // You can set streaming differently for each request
request.query(requestEntry); // or request.execute(procedure)
var errors = [];
var rows = [];
request.on('recordset', columns => {
//console.log(columns);
});
request.on('row', row => {
// THAT I AM DOING FOR NOW
//redisMethods.setValue(JSON.stringify(row), flux);
// THAT I WOULD LIKE TO TO
//return row;
rows.push(row);
});
request.on('error', err => {
// May be emitted multiple times
errors.push(err);
});
request.on('done', result => {
console.log("done for flux :" + flux);
callback(errors, rows);
});
}
然后在你的 server.js 中
sqlMethods.connection().then(function(pool) {
try {
if (pool._connected) {
console.log("Connected to SQL Server database : " + pool.config.database);
// connection to redis database
redisMethods.connection();
// get the requests to execute
sqlMethods.getRequests().then(function (requestArray) {
// loop over the array containing requests
for (var i in requestArray) {
let request = requestArray[i].requete; //extract the request
let flux = requestArray[i].flux; //extract the flux name
sqlMethods.execRequests(request, flux, function (errors, rows) {
if (errors && errors.length) {
// There is errors
}
else if (rows && rows.length) {
// There is no errors but rows
}
});
}
});
}
} catch (err) {
console.log(err);
}
});
希望有帮助。
关于javascript - 从mssql模块中的异步函数返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46361073/