原生node创建路由的分层
为了方便维护 可以将路由内容跟创建路由以及服务端基本结构分来
可以分为四层
服务端的基本基本结构 这个结构就能通过上面暴露的内容 拼成完整的,这里完全是createServer的逻辑 跟业务代码无关 可以说是比较固定的
这里完全是createServer的逻辑 跟业务代码无关 可以说是比较固定的
const http = require('http');
const PORT = 8000;
const serverHandle = require('../app');
const server = http.createServer(serverHandle);
server.listen(PORT);
再把处理 设置一些基本信息、基本设置的配置封装一个文件 然后通过 module.exports暴露,这也和业务代码关联较小
属于系统 服务器基本设置
const apiContent = require('./apiContent');
const serverHandle = (req,res) => {
res.setHeader('Content-type','application/json');//业界规范 就是用json格式
const Data = apiContent(req,res);
if(Data){
res.end(JSON.stringify(Data));
return;
}
//访问的是没定义的接口 返回
res.writeHead(404,{
'Content-type':'text/plain'});
res.write('404');
res.end();
};
module.exports = serverHandle;
把对应接口的被访问时的处理的内容封装一个文件 然后通过 module.exports暴露 就是只管路由接口,返回正确格式,他不管数据怎么计算怎么处理等不归他考虑
const apiContent = (req,res) => {
const method = req.method;
const url = req.url;
const path = url.split('?')[0];
if(method === "GET" && path === "/"){
return {
msg:'/ GET'
}
}
if(method === "POST" && path === "/login"){
return {
msg:'/login POST'
}
}
}
module.exports = apiContent;
在这里对数据进行处理,计算等的内容 只关心数据 最后返回数据并暴露
const getList = (author,keyword) => {
return[ //一般这里是返回的数据库中提取查找的数据 这里为了方便直接写出来的
{
id:1,
title:'标题A',
content:'内容A',
createTime:1546610491112,
author:'zhangsan'
},
{
id: 2,
title:'标题B',
content:'内容B',
createTime: 1546610524373,
author: 'zhangsan'
}
]
}
module.exports = {
getList,
};
在服务器项目中 经常写两个文件夹 router和controller 他是将路由操作和数据操作分开 这样容易维护 可容易调试错误等
router:写路由相关的 就是只管访问分配什么数据,保证数据的格式是正确的,以及接受发过来的信息、数据等
controller :只管处理数据 根据router中的内容发过来的参数处理 把数据返回给router中的内容
所以是router调用controller的关系