2016-11-09 88 views
1

我试图使用connectionconnection.js文件,并使用exports对象使用它在不同的文件webFrontend.js。现在,我得到什么上运行的服务器:为什么显示连接未定义?

{ 
    "Result": "undefinedThis is result" 
} 

这意味着connection没有定义。为什么会发生? connection工作正常,如果在同一个(webFrontend.js)文件被创建getConnection,但问题是,当我在同一个出口功能connection.js使用getConnection因此没有定义connection错误:

这里有2个必要的文件(文件航线没有问题),说明我在做什么:

connection.js

var mysql = require('mysql'); 
exports.connExport = function() { 
    var connectionPool = mysql.createPool({ 
     host: 'localhost', 
     user: 'root', 
     password: '', 
     database: 'rockcity_followme' 
    }); 
    if(connectionPool) { 
     connectionPool.getConnection(function (err, connection) { 
      if (err) { 
       return err; 
      } else { 
       return connection; 
      } 
     }); 
    }else{ 
     var abc="return error"; 
     return abc; 
    } 
} 

webFrontend.js

var connObj=require('../Routes/connection.js'); 
var connection=connObj.connExport(); 
exports.getIndivRecords= function(req, res, next){ 
res.send({ 
    Result: connection+"This is result" 
}); 
    return next(); 
}; 
+1

的[我如何返回从一个异步调用的响应?(可能的复制http://stackoverflow.com/questions/14220321 /如何返回异步调用的响应) – JJJ

+0

我不明白它对我的问题有什么影响? –

+0

'connectionPool.getConnection'是一个异步函数。你为什么认为它有一个回调参数? – JJJ

回答

0

无需为.js文件扩展名,它是自动的为你添加。

下面的代码使用标准误差一回调

webFrontend.js

var connection = require('../Routes/connection'); 
exports.getIndivRecords = function(req, res, next){ 

    // connection takes a standard error-first callback 
    connection(function(err, conn){ 
    if (err) { 
     // Handle the error returned 
     console.log(err); 
    } 
    // The database connection is available here as conn 
    console.log("Connection:" + conn); 

    // presumably you want to do something here 
    // before sending the response 

    res.send({ 
     Result: conn + "This is result" 
    }); 
    }); 
    return next(); 
}; 

connection.js

var mySQL = require('mysql'); 
var connectionPool = mySQL.createPool({ 
    host: 'localhost', 
    user: 'root', 
    password: '', 
    database: 'rockcity_followme' 
}); 
var getConnection = function (cb) { 
    connectionPool.getConnection(function (err, connection) { 
    // pass the error to the callback 
    if (err) { 
     return cb(err); 
    } 
    cb(null, connection); 
    }); 
}; 
module.exports = getConnection; 
+0

它会帮助吗? –

+1

这不回答我的问题。 –

+0

修改了我的答案,并回复了连接 –

0

所有@丹内格尔首先是正确无需要.js

秒您正在获取连接undefinded,因为该方法仍未返回结果。

使用承诺打电话给你Connection.js方法

你的节点是单线程的异步执行, 他所行的等待方法返回一个结果

1)问题与你的JavaScript是

var connection=connObj.connExport(); 
在创作阶段 connection

是由JavaScript定义为未定义和 connObj.connExport();如仍不能与答案返回它执行这个功能在这方面,是不确定的

exports.getIndivRecords= function(req, res, next){ 
res.send({ 
    Result: connection+"This is result" 
}); 

使用承诺读这首可以让你了解一些有关承诺和回调,如果你是无法解决不是评论我会用它。但是玩你首先试试。Thanku

Understanding promises in node.js

好的尝试这个我曾经用过的诺言这里

var connObj = require('../Routes/connection'); 
connObj.connExport().then(
    function (connection) { 
     exports.getIndivRecords = function (req, res, next) { 
      res.send({ 
       Result: connection + "This is result" 
      }); 
      return next(); 
     }; 
    }).catch(function (err) { 
    res.status(400).send(err); 
    return; 
}); 




var mysql = require('mysql'); 
exports.connExport = function() { 
    return new Promise(function (fulfill, reject) { 
    var connectionPool = mysql.createPool({ 
     host: 'localhost', 
     user: 'root', 
     password: '', 
     database: 'rockcity_followme' 
    }); 
    if (connectionPool) { 
     connectionPool.getConnection(function (err, connection) { 
      if (err) { 
       return reject(err); 
      } else { 
       return fulfill(connection); 
      } 
     }); 
    } else { 
     var abc = "return error"; 
     return reject(abc); 
     } 
    }); 
} 
+0

你对第二个答案的评价是什么? –

+0

不,他是错的,它不会工作,这不是正确的回调方式 –

+0

你可以使用回调编辑你的答案? –