如何在nodejs中导出函数

时间:2018-01-17 12:07:50

标签: javascript node.js

我是nodejs的新手,我需要在nodejs中导出函数
db_function.js 文件

var mysql = require('mysql'); 
var config  = require('./config.js');
var con = config.conn;

exports.is_valid_IP = {
 function(IP,callback)
  {
    con.connect(function(err) {
      if (err) throw err;
      con.query("SELECT * FROM server_master", function (err, result, fields) {
        if (err) throw err;
        callback(result);
      });
    });
  }
};

var mysql = require('mysql'); var config = require('./config.js'); var con = config.conn; exports.is_valid_IP = { function(IP,callback) { con.connect(function(err) { if (err) throw err; con.query("SELECT * FROM server_master", function (err, result, fields) { if (err) throw err; callback(result); }); }); } };

app.js 文件

  app.get('/test',function(req,res){
  var IP = 1;
  db.is_valid_IP(IP,function(result){
    console.log(result);
  });
});

显示错误无法调用未定义的方法'connect'

3 个答案:

答案 0 :(得分:2)

让我总结一下评论:

您正确导出。这不是你的问题所在

由于db_function.js中未定义con,因此会出现此问题。

即使您在app.js中声明它,javascript也会正确地隔离两个上下文(app.jsdb_function.js)。

我们在这里讨论不同的文件,但即使在相同的文件中也可以进行上下文保存

var functionOne = function(){
   var con = 1;
}
console.log(con) // undefined err, because con is declared inside the function

即使您调用该功能

var functionOne = function(){
   var con = 1;
}
functionOne();
console.log(con) // undefined err, because con is long gone as soon as function returns

con只会在函数返回之前生效。

如果您想告诉is_valid_IP要使用哪种连接,只需按以下步骤更新您的代码:

db_function.js文件

exports.is_valid_IP = {
 function(IP,con,callback)
  {
    con.connect(function(err) {
      if (err) throw err;
      con.query("SELECT * FROM server_master", function (err, result, fields) {
        if (err) throw err;
        callback(result);
      });
    });
  }
}; 

然后在app.js文件中使用它,如下所示:

app.get('/test',function(req,res){
  var IP = 1;
  db.is_valid_IP(IP,con,function(result){
    console.log(result);
  });
});

答案 1 :(得分:1)

您可以这样导出:

enter code here
var funName = function() {
}
module.exports = funName;

答案 2 :(得分:0)

让我们简化问题,正如问题的标题所示,"如何在nodejs"中导出函数。如果我们只考虑如何在Node.js中导出函数,我们可以这样做:

./ db_function.js(我们导出函数isValidIp):

'use strict';

module.exports.isValidIp = function(ip, callback) {
    console.log("Check if IP is valid.");
    callback();
};

./ app.js

'use strict';

var db = require('./db_function');
// require() returns the object that module.exports references

db.isValidIp('127.0.0.1', function(){
    console.log('Called back.');
});

使用命令node app.js运行它,您将获得:

Check if IP is valid.
Called back.

一个警告

./ db_function.js(此版本不起作用):

'use strict';

exports = { 
    isValidIp: function(ip, callback) {
        console.log("Check if IP is valid.");
        callback();
    }
};

您将获得TypeError:

TypeError: db.isValidIp is not a function

那是因为require()返回module.exports,而不是export。 exports只是module.exports的简写。如果将导出指向其他对象,则还应更新module.exports。以下版本将起作用:

'use strict';

exports = { 
    isValidIp: function(ip, callback) {
        console.log("Check if IP is valid.");
        callback();
    }
};

module.exports = exports;