拆分长的 NodeJs webserver 文件
Split the long NodeJs webserver File
我的 NodeApplication 有一个很长的 webserver.js 文件,基本上它的作用是
它有一个显示静态页面的快速模块,还有一些处理 GET 和 POST 请求的函数 ..
这些 GET 和 POST 请求将在内部调用一些 REST 服务来获取数据并将结果传递给浏览器,因此 REST API 不会暴露给 public ..
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 路由器 来达到这个目的。
下面的代码简单演示了如何修改您的代码。
您的主文件分为三个部分
- 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);
将您的路由处理放在此处。
- 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;
};
把你的逻辑放在这里。
- 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();
}
})
};
我的 NodeApplication 有一个很长的 webserver.js 文件,基本上它的作用是 它有一个显示静态页面的快速模块,还有一些处理 GET 和 POST 请求的函数 ..
这些 GET 和 POST 请求将在内部调用一些 REST 服务来获取数据并将结果传递给浏览器,因此 REST API 不会暴露给 public ..
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 路由器 来达到这个目的。
下面的代码简单演示了如何修改您的代码。
您的主文件分为三个部分
- 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);
将您的路由处理放在此处。
- 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;
};
把你的逻辑放在这里。
- 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();
}
})
};