我的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在这种情况下不会帮助我
答案 0 :(得分:1)
您可以使用 express router 来实现此目的。
下面的代码简单演示了如何修改代码。
您的主文件分为三个部分
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();
}
})
};
答案 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);
这只是一个基本的例子,希望它有所帮助。