App.js:
var http=require("http");
var app=require("./router");
var ejs=require("ejs");
http.createServer(app).listen(8100);
//注册路由
app.get("/",function(req,res){
ejs.renderFile("./static/index.ejs","",function(err,str){
res.send(str);
});
});
//get
/*app.get("/login",function(req,res){
var data=req.body;
ejs.renderFile("./static/login.ejs",data,function(err,str){
res.send(str);
});
});*/
//post
app.post("/login",function(req,res){
var data=req.body;
ejs.renderFile("./static/login.ejs",data,function(err,str){
res.send(str);
});
});
router.js:
//模拟express路由写法
var url=require("url");
var obj={};
obj._get={};
obj._post={};
var app=function(req,res){
res.send=function(data){
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
res.end(data);
}
//找当前req请求的method方式
var method=req.method.toLowerCase();
var path=url.parse(req.url,true);
var pathname=path.pathname;
if(path=="/favicon.ico") return;
//根据路径判断路由有没有 如果有则执行路由的方法,即执行注册路由
if(obj["_"+method][pathname]){
if(method=="get"){
req.body=path.query;
//路由方法
obj["_"+method][pathname](req,res);
}
else{
var result="?";
req.on("data",function(str){
result+=str;
});
req.on("end",function(){
//post传值解析出来直接给req.body属性
req.body=url.parse(result,true).query;
//路由方法
obj["_"+method][pathname](req,res);
});
}
}
else{
res.end("404");
}
}
//封装get方法 在对象上生成路由
app.get=function(string,callback){
obj._get[string]=callback;
}
//封装post方法
app.post=function(string,callback){
obj._post[string]=callback;
}
module.exports=app;
index.ejs:
<body>
<div>首页</div>
<form method="post" action="/login">
<ul>
<li>账号:<input type="text" name="id"/></li>
<li>密码:<input type="text" name="pwd"/></li>
<li><input type="submit" value="登录"/></li>
</ul>
</form>
</body>
login.ejs:
<body>
<div>登录成功!</div>
<div><%=id%></div>
<div><%=pwd%></div>
</body>
目录: