Paste_Image.png安装
epress
, 可以使用npm install express --save
进行安装,如果使用webStorm
的话,新建一个node
项目,会自动帮你下载express
包。
等你创建好之后就会有一个
node_modules
一个文件夹下就会有express
这个包。
1、路由能力
var express = require("express");
var app = express();
app.get("/",function(req,res){
res.send("你好");
});
app.get("/haha",function(req,res){
res.send("这是haha页面,哈哈哈哈哈哈");
});
//使用正则匹配学号
app.get(/^\/student\/([\d]{10})$/,function(req,res){
res.send("学生信息,学号" + req.params[0]);
});
app.get("/teacher/:gonghao",function(req,res){
res.send("老师信息,工号" + req.params.gonghao);
});
app.listen(3000);
app.get()
,该方法中有两个参数,第一个参数为请求路径,不分大小写,第二个为回掉函数,请求路径可以使用正则匹配,app.post()
也是同样的参数形式。app.listen(3000)
表示监听3000端口,在浏览器输入localhost:3000
就可以访问。
正则表达式可以被使用。正则表达式中,未知部分用圆括号分组,然后可以用req.params[0]、[1]
得到,req.params
为类数组对象。
app.get(/^\/student\/([\d]{10})$/,function(req,res){
res.send("学生信息,学号" + req.params[0]);
});
但是用冒号这种方法更好一些:
app.get("/student/:id",function(req,res){
var id = req.params["id"];
// var id = req.params.id;(这种方式也能获取到id的值)
var reg= /^[\d]{6}$/; //正则验证
if(reg.test(id)){
res.send(id);
}else{
res.send("请检查格式");
}
});
2、静态文件
Express
提供了内置的中间件 express.static
来设置静态文件如:图片, CSS, JavaScript
等,你可以使用 express.static
中间件来设置静态文件路径。例如,如果你将图片, CSS, JavaScript
文件放在 public 目录下,你可以这么写:
app.use(express.static('public'));
3、中间件
路由get、post
这些东西,就是中间件,中间件讲究顺序,匹配上第一个之后,就不会往后匹配了。next
函数才能够继续往后匹配。如果我的的get、post
回调函数中,没有next
参数,那么就匹配上第一个路由,就不会往下匹配了。如果想往下匹配的话,那么需要写next()
.
app.get("/",function(req,res,next){
console.log("1");
next();
});
app.get("/",function(req,res){
console.log("2");
});
app.use()
也是一个中间件。与get、post
不同的是,他的网址不是精确匹配的。而是能够有小文件夹拓展的。比如网址: http://127.0.0.1:3000/admin/aa/bb/cc/dd
app.use("/admin",function(req,res){
res.write(req.originalUrl + "\n"); // /admin/aa/bb/cc/dd
res.write(req.baseUrl + "\n"); // /admin
res.write(req.path + "\n"); // /aa/bb/cc/dd
res.end("你好");
});
如果只写一个/
的话,就匹配所有网址
//当你不写路径的时候,实际上就相当于"/",就是所有网址
app.use(function(req,res,next){
console.log(new Date());
next();
});
4、内容渲染
- 大多数情况下,渲染内容用
res.render()
,将会根据views
中的模板文件进行渲染。如果不想使用views文件夹,想自己设置文件夹名字,那么app.set("views","aaaa")
; - 如果想写一个快速测试页,当然可以使用
res.send()
。这个函数将根据内容,自动帮我们设置了Content-Type
头部和200状态码。send()
只能用一次,和end
一样。和end
不一样在哪里?能够自动设置MIME
类型。 - 如果想使用不同的状态码,可以:
res.status(404).send('Sorry, we cannot find that!');
- 如果想使用不同的Content-Type,可以:
res.set('Content-Type', 'text/html');
网友评论