Reputation: 233
I wrote a server (which should get the requests and sends the responses) and another server which connected to db (and has some functions for different queries).
The project has RoutingPath.Js which only routes to a needed function according to the path of url. ServerLogic.Js init the db-server, some functions (according to the RoutingPath) and query function:
var SqlServer = require("./ConnectToSql");
var request = SqlServer.ConnectToSql();
if (SqlServer == null)
{
console.log ("+++++++SqlServer = null");
}
else
{
console.log ("-------SqlServer" + SqlServer);
}
if (request == null)
{
console.log("!!!!!!!!!");
}
else
{
console.log("$$$$$$$$$$"+request);
}
function Welcome(params)
{
console.log("ServerLogic: Welcome to My Trip server with: " + params.user + "=" + params.password);
var tmp = RunQuery("SELECT GroupName FROM Groups");
console.log("Welcome: " + tmp);
//return "Welcome to My Trip server with: " + params.user + "=" + params.password;
return tmp;
}
function RunQuery(sqlquery)
{
console.log("---request: " + request + "--------");
request.query(sqlquery, function(err, recordset) {
if (err)
{
console.log(err);
console.log("----End Query Error-------");
}
else
{
console.log(recordset);
console.log("----End recordset-------");
return recordset;
}
});
}
exports.Welcome = Welcome;
And I have ConnectToSql.Js which connects to db:
var sql = require('C:/Program Files/nodejs/node_modules/mssql');
var config = {
user: '',
password: '',
server: '',
database: '',
}
};
function ConnectToSql()
{
var connection = new sql.Connection(config, function(err) {
if (err)
{
console.log(err);
}
else
{
var request = new sql.Request(connection);
console.log("#########" + request);
return request;
}
});
}
exports.ConnectToSql = ConnectToSql;
This is my output:
-------SqlServer[object Object] !!!!!!!!! #########[object Object]
So my problem is the order of the output: Why does the: "#########[object Object]" not second output (and then the third output would be: $$$$$$$$$$[object Object])
Upvotes: 0
Views: 732
Reputation: 106698
The reason request == null
is because ConnectToSql()
is non-blocking and is returning right away, before the connection is made. You should pass in callbacks when working with asynchronous code. Example:
function ConnectToSql(callback) {
var connection = new sql.Connection(config, function(err) {
if (err)
return callback(err);
callback(null, connection);
});
}
Then in your main server logic:
var sql = require('C:/Program Files/nodejs/node_modules/mssql'),
SqlServer = require('./ConnectToSql');
var connection;
function Welcome(params, callback) {
console.log('ServerLogic: Welcome to My Trip server with: ' + params.user + '=' + params.password);
RunQuery('SELECT GroupName FROM Groups', callback);
}
function RunQuery(sqlquery, callback) {
if (!connection) {
SqlServer.ConnectToSql(function(err, conn) {
if (err)
return callback(err);
connection = conn;
RunQuery(sqlquery, callback);
});
return;
}
var request = new sql.Request(connection);
request.query(sqlquery, callback);
}
exports.Welcome = Welcome;
Then use Welcome()
like:
Welcome(params, function(err, recordset) {
// ...
});
Upvotes: 1