Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 拆分长节点JS Web服务器文件_Node.js_Web Deployment - Fatal编程技术网

Node.js 拆分长节点JS Web服务器文件

Node.js 拆分长节点JS Web服务器文件,node.js,web-deployment,Node.js,Web Deployment,我的NodeApplication有一个很长的webserver.js文件,它的基本功能是 它有一个显示静态页面的express模块,还有一些处理GET和POST请求的功能 这些GET和POST请求将在内部调用一些REST服务来获取数据并将结果传递给浏览器,这样REST API就不会公开 var express = require('express'); var request = require('request'); var compression = require

我的NodeApplication有一个很长的webserver.js文件,它的基本功能是 它有一个显示静态页面的express模块,还有一些处理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,在这种情况下它对我没有帮助

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

我们还可以通过将回调与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);

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

您可以使用快速路由器来实现此目的

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

主文件分为三部分


  • server.js(仅文件名,使用您的约定)


  • 把你的路线安排在这里

  • routes.js


  • 把你的逻辑放在这里

  • controller.js


  • 你必须使用路由器。谢谢你。。。路由器对我来说是新的…这是一个很好的解决方案。我已经使用express.Router()实现了;但是以一种更简单的方式,比如var objApiServer=require(“./node_scripts/ApiServer”);应用程序使用(“/”,objApiServer);其中ApiServer具有一些GET请求管理
     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);
    
    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;
    };
    
     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();
             }
    
    
         })
    
    
     };