学习总结之用,方便以后调整
目录
├── app.js
├── bin
│ └── env.js
├── handle.js
├── public
├── README.md
├── routes
│ ├── handles
│ │ ├── instruction.js
│ │ ├── login.js
│ │ ├── quit.js
│ │ └── systemList.js
│ └── routes.js
├── system.json
└── views
bin
: 服务器目录
public
: 静态文件,如前端页面
routes
: 路由文件
views
: 页面文件
app.js
: 入口文件
handles.js
: 请求类型以及路由处理函数
代码实现
app.js
导出一个httpServer
对象,用于创建服务器
const handle = require('./handle').handle;
const routeHandle = require('./handle').routeHandle;
let app = function(req, res) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Headers', '*');
handle(req, params => {
routeHandle(req, res, params);
})
}
module.exports = app;
bin/env
引入app
并且创建服务器,这里简单创建服务器并监听9090
端口.后面可以添加各种配置
const http = require('http');
const app = require('../app');
http.createServer(app).listen(9090);
handle.js
定义了app.js
所调用的函数,用于处理不同的请求方式以及对应的路由处理
const url = require('url');
const querystring = require('querystring');
const routerList = require('./routes/list');
function handle(req, cb) {
let data = '';
req.on('err', err => {
return console.error(err);
}).on('data', chunk => {
data += chunk;
}).on('end', () => {
requestHandle(req, data, cb);
})
}
function requestHandle(req, data, cb) {
switch(req.method){
case 'GET':
let query = url.parse(req.url, true).query;
cb(query);
break;
case 'POST':
if(data.length > 1e6){
return req.connection.destory();
}
let params = querystring.parse(data);
cb(params);
break;
default:
break;
}
}
function routeHandle(req, res, params) {
let pathname = url.parse(req.url, true).pathname,
routerItem = routerList.isRouter(pathname);
if (routerItem) {
return routerList.list[routerItem](res, pathname, params, req.method);
}
}
module.exports = {
handle,
routeHandle
}
routes
文件包含routes.js
以及handle
文件夹,handle
文件夹中的文件名为要处理的路由名.
routes.js
具体实现:
class List{
'/'(res) {
res.end('hello');
}
}
const routerAttrList = Object.getOwnPropertyNames(List.prototype);
function isRouter(pathname) {
return routerAttrList.find((item, index) => {
if(pathname === item || pathname.startsWith(item) && (item !== '/')){
return item;
}else{
return false;
}
})
}
module.exports = {
isRouter,
routerAttrList,
list: new List()
}
网友评论