Node.js 拆分长节点JS Web服务器文件
我的NodeApplication有一个很长的webserver.js文件,它的基本功能是 它有一个显示静态页面的express模块,还有一些处理GET和POST请求的功能 这些GET和POST请求将在内部调用一些REST服务来获取数据并将结果传递给浏览器,这样REST API就不会公开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
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);
这只是一个基本的例子,希望能有所帮助。您可以使用快速路由器来实现此目的 下面的代码是如何修改代码的简单演示 主文件分为三部分
把你的路线安排在这里
把你的逻辑放在这里
你必须使用路由器。谢谢你。。。路由器对我来说是新的…这是一个很好的解决方案。我已经使用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();
}
})
};