拆分长NodeJs网络服务器文件

时间:2017-02-16 04:47:17

标签: node.js web-deployment

我的NodeApplication有一个很长的webserver.js文件,基本上它做的是什么 它有一个快速模块来显示静态页面,还有一些函数来处理GET和POST请求..

这些GET和POST请求将在内部调用一些REST服务来获取数据并将结果传递给浏览器,以便REST API不会公开...

    var express = require('express');
    var request = require('request');
    var compression = require('compression');
    var bodyParser = require('body-parser');
    var app = express();
    var util = require("util");
    async = require("async");



    app.use(compression());
    app.use(bodyParser.json({}));
    app.use(bodyParser.urlencoded({ extended: true }));


    require('./node_scripts/session.js')(app);
    var Url = require('./node_scripts/ServiceUrls.js');


    //REDIRECT TO PUBLIC DIRECTORY
    app.use('/', express.static(__dirname + '/public'));


    //GET TEMPLATES FOR FORM
    app.get('/Templates', function(req, res) {
        var MyJsonData = {
            AccessToken: req.session.AccessToken || 0
        };
        console.log(MyJsonData);
        request({
            url: Url.UserService + 'GetTemplates', //URL to hit
            method: 'POST',
            json: MyJsonData

        }, function(error, response, body) {
            if (error) {

                res.send("dummytext");
                res.end();
                console.log("/Templates (send dummy data) ->" + error);
            } else {
                console.log("/Templates REST Response");
                console.log(response.statusCode, body);
                res.send(body);
                res.end();
            }


        })
    });

app.get('/AnotherRequest', function(req, res) {
        });
..
..
..
app.get('/AnotherNthRequest', function(req, res) {
        });

那么我如何分割文件以便将某些请求分组为单独的js文件并且更容易开发

我对NodejS来说是全新的。雅,但我有经验的PHP在这种情况下不会帮助我

2 个答案:

答案 0 :(得分:1)

您可以使用 express router 来实现此目的。

下面的代码简单演示了如何修改代码。

您的主文件分为三个部分

  1. server.js(只是文件名,使用你的约定)
  2.  var express = require('express');
     var bodyParser = require('body-parser');
     var app = express();
    
     app.use(bodyParser.json({}));
     app.use(bodyParser.urlencoded({
         extended: true
     }));
    
     //REDIRECT TO PUBLIC DIRECTORY
     app.use('/', express.static(__dirname + '/public'));
    
     // Send request to the routes
    var router = require('./routes')(app, express);
    
    // Append the router 
    app.use('/', router);
    

    将您的路线处理放在这里。

    1. routes.js
    2. var myController = require('./controller');
      
      
      module.exports = function (app, express) {
      
          // Create route handlers
          var router = express.Router();
      
          router.route('/Templates')
              //GET TEMPLATES FOR FORM
              .get(function (req, res) {
                  myController.myFunction(req,res);
              });
      
          router.route('/AnotherRequest')
              .get(function (req, res) {});
      
          ..
          ..
          ..
      
          router.route('/AnotherNthRequest')
              .get(function (req, res) {});
      
          return router;
      };
      

      把你的逻辑放在这里。

      1. controller.js
      2.  var request = require('request');
        
        
         var Url = require('./node_scripts/ServiceUrls.js');
        
         exports.myFunction = function (req, res) {
        
             var MyJsonData = {
                 AccessToken: req.session.AccessToken || 0
             };
             console.log(MyJsonData);
             request({
                 url: Url.UserService + 'GetTemplates', //URL to hit
                 method: 'POST',
                 json: MyJsonData
        
             }, function (error, response, body) {
                 if (error) {
        
                     res.send("dummytext");
                     res.end();
                     console.log("/Templates (send dummy data) ->" + error);
                 } else {
                     console.log("/Templates REST Response");
                     console.log(response.statusCode, body);
                     res.send(body);
                     res.end();
                 }
        
        
             })
        
        
         };
        

答案 1 :(得分:0)

我们可以利用快速实例(var app),记住express支持以下与HTTP方法对应的路由方法:get,post,put,head,delete等。这意味着我们可以通过快递instance作为处理我们路由的函数的参数。

我们还可以通过将回调与HTTP方法分离来进一步理解这一概念(记住路由的格式为app.VERB('path',callback)),因此我们也将回调放在单独的文件中。

我们可以使用exports。 CALLBACKNAME 来公开单个回调和module.exports,以将我们的完整路由文件公开给服务器模块。因此:

//templates.controller.js (this is the file name for example)

exports.tempHandler = function(req, res) {
    var MyJsonData = {
        AccessToken: req.session.AccessToken || 0
    };
    console.log(MyJsonData);
    request({
        url: Url.UserService + 'GetTemplates', //URL to hit
        method: 'POST',
        json: MyJsonData

    }, function(error, response, body) {
        if (error) {

            res.send("dummytext");
            res.end();
            console.log("/Templates (send dummy data) ->" + error);
        } else {
            console.log("/Templates REST Response");
            console.log(response.statusCode, body);
            res.send(body);
            res.end();
        }


    })
};

template.router.js

// we first export the file which houses our callbacks
var templates = require('../controllers/template.controller.js');

// the app parameter represents the express instance (var app)
// we provide it as a parameter and manipulate it in the file

module.exports = function(app) {
    // Here you go, short and clean
    app.get('/Templates', templates.tempHandler);
    // and your other routes
};

然后在webserver.js中,您只需添加以下行代替您的路线:

require('./app/routes/template.router')(app);

这只是一个基本的例子,希望它有所帮助。