获取回调结果(Nodejs)
Get the callback results (Nodejs)
我的快递和 sql 查询代码有问题。我无法获得下面 sql 查询的 results
的值,但这在记录 results
时有效。我已经 return 这里 results
。
这是我的 sql.js
代码
var dataContext = require('node2sql')({
username: 'user',
password: 'password',
server: '1xx.xx2.xx.xx9',
options: {
database: 'grades'
}
});
module.exports = {
DataQuery: function(query) {
query = query.replace(/\s+/g, '').split("/");
year = query[2].substr(2, 4);
id = query[0];
period = query[1].toUpperCase();
if (period == 'SEM1') {
period = "1st Semester";
} else if (period == "SEM2") {
period = "2nd Semester";
}else if (period == 'SUM') {
period = "Summer";
}
var queryStr = "SELECT SubjectCode,Grade FROM dbo.grade_list_" + year + " WHERE StudentNo=\'" + id + "\' and Semester=\'" + period + "\'";
console.log(queryStr);
dataContext.query(queryStr, function(err, results) {
console.log(results)
return results;
});
}
}
这是我的索引页,如您所见,我想获取 data
的 return 值并将其显示到我的索引页(仅用于测试)。
var express = require('express');
var sql = require('../libs/sql');
var router = express.Router();
router.get('/', function(req, res, next) {
var data = sql.DataQuery("01-666-123/sem2/2009")
res.end(data);
});
module.exports = router;
我接受你们的任何建议。我已经读过这个 question 之前有人问过,但我仍然不知道如何让它工作。谢谢
您不能从回调中 return。 (回调是异步的,可以随时完成。)试试这个:
sql.js
var dataContext = require('node2sql')({
username: 'user',
password: 'password',
server: '1xx.xx2.xx.xx9',
options: {
database: 'grades'
}
});
module.exports = {
DataQuery: function(query, callback) {
query = query.replace(/\s+/g, '').split("/");
year = query[2].substr(2, 4);
id = query[0];
period = query[1].toUpperCase();
if (period == 'SEM1') {
period = "1st Semester";
} else if (period == "SEM2") {
period = "2nd Semester";
}else if (period == 'SUM') {
period = "Summer";
}
var queryStr = "SELECT SubjectCode,Grade FROM dbo.grade_list_" + year + " WHERE StudentNo=\'" + id + "\' and Semester=\'" + period + "\'";
console.log(queryStr);
dataContext.query(queryStr, callback);
}
}
index.js
var express = require('express');
var sql = require('../libs/sql');
var router = express.Router();
router.get('/', function(req, res, next) {
sql.DataQuery("01-666-123/sem2/2009", function(err, data) {
res.end(data);
});
});
module.exports = router;
您的代码的主要问题是可以随时调用回调,特别是(通常)在调用者返回之后。您需要在 sql 提供商的回调中完成 HTTP 请求:
var dataContext = require('node2sql')({
username: 'user',
password: 'password',
server: '1xx.xx2.xx.xx9',
options: {
database: 'grades'
}
});
module.exports = {
DataQuery: function(query,fn) {
query = query.replace(/\s+/g, '').split("/");
year = query[2].substr(2, 4);
id = query[0];
period = query[1].toUpperCase();
if (period == 'SEM1') {
period = "1st Semester";
} else if (period == "SEM2") {
period = "2nd Semester";
}else if (period == 'SUM') {
period = "Summer";
}
var queryStr = "SELECT SubjectCode,Grade FROM dbo.grade_list_" + year + " WHERE StudentNo=\'" + id + "\' and Semester=\'" + period + "\'";
console.log(queryStr);
dataContext.query(queryStr, function(err, results) {
console.log(results)
// Note: Call code provided by your http server now that
// the result is known.
fn(err, results);
});
}
}
并且在您的 http 服务器中:
var express = require('express');
var sql = require('../libs/sql');
var router = express.Router();
router.get('/', function(req, res, next) {
// Note: The callback will fire when the sql data is available.
// The function below goes into the fn argument in DataQuery.
// DataQuery calls it when the data is ready.
sql.DataQuery("01-666-123/sem2/2009", function(err, data) {
res.end(data);
});
});
module.exports = router;
我的快递和 sql 查询代码有问题。我无法获得下面 sql 查询的 results
的值,但这在记录 results
时有效。我已经 return 这里 results
。
这是我的 sql.js
代码
var dataContext = require('node2sql')({
username: 'user',
password: 'password',
server: '1xx.xx2.xx.xx9',
options: {
database: 'grades'
}
});
module.exports = {
DataQuery: function(query) {
query = query.replace(/\s+/g, '').split("/");
year = query[2].substr(2, 4);
id = query[0];
period = query[1].toUpperCase();
if (period == 'SEM1') {
period = "1st Semester";
} else if (period == "SEM2") {
period = "2nd Semester";
}else if (period == 'SUM') {
period = "Summer";
}
var queryStr = "SELECT SubjectCode,Grade FROM dbo.grade_list_" + year + " WHERE StudentNo=\'" + id + "\' and Semester=\'" + period + "\'";
console.log(queryStr);
dataContext.query(queryStr, function(err, results) {
console.log(results)
return results;
});
}
}
这是我的索引页,如您所见,我想获取 data
的 return 值并将其显示到我的索引页(仅用于测试)。
var express = require('express');
var sql = require('../libs/sql');
var router = express.Router();
router.get('/', function(req, res, next) {
var data = sql.DataQuery("01-666-123/sem2/2009")
res.end(data);
});
module.exports = router;
我接受你们的任何建议。我已经读过这个 question 之前有人问过,但我仍然不知道如何让它工作。谢谢
您不能从回调中 return。 (回调是异步的,可以随时完成。)试试这个:
sql.js
var dataContext = require('node2sql')({
username: 'user',
password: 'password',
server: '1xx.xx2.xx.xx9',
options: {
database: 'grades'
}
});
module.exports = {
DataQuery: function(query, callback) {
query = query.replace(/\s+/g, '').split("/");
year = query[2].substr(2, 4);
id = query[0];
period = query[1].toUpperCase();
if (period == 'SEM1') {
period = "1st Semester";
} else if (period == "SEM2") {
period = "2nd Semester";
}else if (period == 'SUM') {
period = "Summer";
}
var queryStr = "SELECT SubjectCode,Grade FROM dbo.grade_list_" + year + " WHERE StudentNo=\'" + id + "\' and Semester=\'" + period + "\'";
console.log(queryStr);
dataContext.query(queryStr, callback);
}
}
index.js
var express = require('express');
var sql = require('../libs/sql');
var router = express.Router();
router.get('/', function(req, res, next) {
sql.DataQuery("01-666-123/sem2/2009", function(err, data) {
res.end(data);
});
});
module.exports = router;
您的代码的主要问题是可以随时调用回调,特别是(通常)在调用者返回之后。您需要在 sql 提供商的回调中完成 HTTP 请求:
var dataContext = require('node2sql')({
username: 'user',
password: 'password',
server: '1xx.xx2.xx.xx9',
options: {
database: 'grades'
}
});
module.exports = {
DataQuery: function(query,fn) {
query = query.replace(/\s+/g, '').split("/");
year = query[2].substr(2, 4);
id = query[0];
period = query[1].toUpperCase();
if (period == 'SEM1') {
period = "1st Semester";
} else if (period == "SEM2") {
period = "2nd Semester";
}else if (period == 'SUM') {
period = "Summer";
}
var queryStr = "SELECT SubjectCode,Grade FROM dbo.grade_list_" + year + " WHERE StudentNo=\'" + id + "\' and Semester=\'" + period + "\'";
console.log(queryStr);
dataContext.query(queryStr, function(err, results) {
console.log(results)
// Note: Call code provided by your http server now that
// the result is known.
fn(err, results);
});
}
}
并且在您的 http 服务器中:
var express = require('express');
var sql = require('../libs/sql');
var router = express.Router();
router.get('/', function(req, res, next) {
// Note: The callback will fire when the sql data is available.
// The function below goes into the fn argument in DataQuery.
// DataQuery calls it when the data is ready.
sql.DataQuery("01-666-123/sem2/2009", function(err, data) {
res.end(data);
});
});
module.exports = router;