簡體   English   中英

分割長的NodeJs Web服務器文件

[英]Split the long NodeJs webserver File

我的NodeApplication有一個長的webserver.js文件,基本上它是做什么的,它有一個用於顯示靜態頁面的Express模塊​​,還有一些處理GET和POST Request的功能。

這些GET和POST請求將在內部調用某些REST服務以獲取數據並將RESULT傳遞給瀏覽器,因此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,在這種情況下不會幫助我

您可以為此使用快速路由器

下面的代碼簡單演示了如何修改您的代碼。

您的主文件分為三部分


  1. server.js(僅文件名,使用約定)

 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

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

 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();
         }


     })


 };

我們可以利用express實例(var應用程序),請記住express支持以下與HTTP方法相對應的路由方法:get,post,put,head,delete等。這意味着我們可以將express實例作為為我們處理路由的函數的參數。

我們還可以通過將回調方法與HTTP方法分開來進一步提高概念(記住路由的格式為app.VERB('path',callback)),因此我們也將回調方法存放在單獨的文件中。

我們可以使用出口。 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);

這只是一個基本示例,希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM