原生NodeJs:
优点:
- 单线程执行成多线程,
- 非阻塞I/O,
- 事件环机制;
不会傻等一个事件结束再执行下一个,会采用异步的方式执行事件,当遇到需要读取磁盘或者数据库等操作时,会将其塞入事件环中,形成非阻塞I/O,提高cpu利用率。
缺点:
- 路由处理代码不直观清晰,需要很多正则或者字符串表达式
- 由于是异步事件,不能专注也业务代码,要考虑很多其他的东西
- 呈递静态页面很不方便,需要处理每一个http请求。
Express:
顶层函数:
var express=require("express");
var app=express();
//之后的是app.xxx
get请求:
//当app发起一个get请求时,并不代表直接发送get请求,
//get=>post:post请求
app.get(/^\/student\/(\d{10})$/,function(req,res){
var param=req.params[0]
res.send("/"+param)
});
res.params是个类数组形式,可以通过数组形式获取到正则中的小括号式子
还可以通过:
形式来获取
app.get("/student/:id",function(req,res){
var param=req.params["id"]
res.send("/"+param)
});
路由:
- 使用ejs模板引擎
npm install ejs --save
通过ejs来渲染模板
app.set("view engine","ejs")
完整代码:
app.set("view engine","ejs")
app.get("/",function(req,res){
res.render("from")
});
//post提交表单
app.post("/",function(req,res){
res.send("成功")
})
HTML模板文件:
<form action="#" method="POST" enctype="multipart/form-data">
<input type="text" name="name" value="" placeholder="请输入姓名">
<input type="radio" name="sex" value="女">女
<input type="radio" name="sex" value="男">男
<input type="file" name="picture">
<input type="submit">
</form>
中间件: app.use()
// app.get("/",function(req,res){
// res.render("from")
// });
app.use("/admin",function(req,res){
res.write(req.originalUrl+"\n");
res.write(req.baseUrl+"\n");
res.write(req.path);
res.end("")
})
可以访问admin下的任意路径文件
在function中加入参数next
例如
// app.get("/",function(req,res){
// res.render("from")
// });
app.use("/",function(req,res,next){
res.write("success");
next()
})
若不加next(),则后续访问/
下任何地址都执行的是输出success,有了next()
,就可以进入进入别的app.use/get/post等执行相应操作了,如果app.use()不写路径的话,相当于"/"