如何在节点js中模块化代码

时间:2015-02-16 19:33:57

标签: javascript node.js

我是Node新手。我已经完成了一个示例应用程序,我在一个文件server.js

中完成了所有代码
var express = require('express'),
                nconf=require('nconf');
            var app = express()
            nconf.env().file({ file: 'db-config.json'});
            app.use(express.static(__dirname+"\\client"));
            var dbConfig = nconf.get();
            console.log();
            var mysql      = require('mysql');
            var connection = mysql.createConnection({
                        host: dbConfig.hostname,
                        port: dbConfig.port,
                        user: dbConfig.user,
                        password: dbConfig.password,
                        database: dbConfig.db
            });

            app.get('/', function (req, res) {
                 res.sendFile(__dirname+"\\client\\index.html");
            })
            app.get('/getTables', function (req, res) {
                     var sql="SELECT table_name as text from information_schema.tables where table_schema = ?";
                     connection.query(sql,[dbConfig.db],function(err,rows,fields){
                     if(!err){
                      var data={

                           "children":[]
                      };
                      for(var i=0;i<rows.length;i++){
                        rows[i].leaf=true;
                        data.children.push(rows[i]);
                      }
                       res.json(data);
                     }else{
                     console.log("db not connected");
                     }

                     });

            })
            var server = app.listen(3000, function () {

              var host = server.address().address
              var port = server.address().port

              console.log('Example app listening at http://%s:%s', host, port)

            })

我想知道如何在一个文件中编写我的所有mysql配置代码,并在任何我想要的地方使用。我想在另一个fie中编写客户端响应。

4 个答案:

答案 0 :(得分:5)

我记得有两种方法可以从其他模块中导出方法或对象:

  1. module.exports
    使用:
  2. //yourModule.js

    function method1(){    
    }
    

    要导出此功能,我们可以执行以下操作:

    module.exports = method1;
    

    在这种情况下,当您使用var myModule = require("./yourModule")时,myModule将为method1,即要拨打电话,您只需拨打myModule()

    或者您可以输出:

    module.exports = { 
        method1: method1,
        method2: ...
    }
    

    在这种情况下,当您使用上述情况中的require来调用函数时,您需要输入:myModule.method1();

    1. 第二种方式是直接使用:
    2. exports.method1 = function (){}; exports.method2 = function (){}; exports.someObject = {};

      ,这将与:

      相同
      module.exports = { 
              method1: method1,
              method2: ...
          }
      

      <强> Reference

      P.S。因为您正在使用快速js,我建议您输入控制台:npm install express-generator -g这将为您创建具有初始结构的模板项目。所有文件夹,如路线,视图,javascripts等。

答案 1 :(得分:1)

使用require

var someModule= require('./myModule');

修改

在此处阅读node.js模块:http://nodejs.org/api/modules.html#modules_modules

答案 2 :(得分:0)

您可以为DB模块编写api,并在主文件中需要此模块。

var mysql = require('mysql');

...

connect = function (dbConfig) {
    mysql.createConnection({
        host: dbConfig.hostname,
        port: dbConfig.port,
        user: dbConfig.user,
        password: dbConfig.password,
        database: dbConfig.db
    });
};

select = function (req, res) {
    var sql = "SELECT table_name as text from information_schema.tables where table_schema = ?";
    connection.query(sql, [dbConfig.db], function (err, rows, fields) {
        if (!err) {
            var data = {
                "children": []
            };
            for (var i = 0; i < rows.length; i++) {
                rows[i].leaf = true;
                data.children.push(rows[i]);
            }
            res.json(data);
        } else {
            console.log("db not connected");
        }
    });
};

在您的主文件中,您可以要求此文件。

var myDBAPI = require('./myDBAPI');

app.get('/', function (req, res) {
  res.sendFile(__dirname+"\\client\\index.html");
});

app.get('/getTables', myDBAPI.select(req, res));
PS:别忘了;在说明之后

答案 3 :(得分:0)

您可以使用环境变量来设置服务器和数据库参数。

使用node-env-file模块从.env文件加载此设置:

dev.env

DATABASE_URL=localhost:3306 DATABASE_USERNAME=root DATABASE_PASSWORD= SERVER_IP=127.0.0.1 SERVER_PORT=3000

用法:

app.listen(process.env.SERVER_IP || '127.0.0.1', process.env.SERVER_PORT || 3000);

https://www.npmjs.com/package/node-env-file