1.前言
我是一名学前端的学生,为什么跑来学后端,学node.js呢?我们学前端的知识点广,而后端的知识点则更深。以后出去工作,前后端是要搭配着工作的,我们不学着点后端知识(比如前后端的网络交互),那以后项目出现点什么BUG,后端都把锅摔给前端咋办?哈哈。不过我学后端,主要还是为了开发一些属于自己的小东西,不能总是搭配一些静态页面吧,那多无聊啊。程序员都想有属于自己能上线的小东西,我就是奔着这个来的。而express框架是node.js中相对较全的库,学会它足够满足我们的小项目。好啦,开始学习之路。
如何在node.js项目中引入express框架?
在vscode终端输入下面命令:
cnpm install express --save
2. 请求与响应
a.看个服务器简单的get请求:
var express=require("express");//引入express框架
var app=express();//框架实例
app.listen(8080);//监听8080端口
app.get("/",function(req,res){
res.send("this is 首页");//返回给前端浏览器
});
console.log("node.js server is starting");
b.启动服务器:
如果不清楚nodemon命令可以看我这篇博客。
c.在浏览器访问该服务器:
你看一个简单的服务器就这样搭建,这就是express框架的优势。
注意:app.send()这个方法不仅仅可以发送字符串,也可以发送对象(数组也是对象),且它会自动帮你转换为JSON格式,不需要你再显式方式转换。
由于我们上面搭配的服务器只写了根路由得响应,那么我们在浏览器访问其它路由会怎样?
那我是怎么会知道这些框架的方法的呢?你是否还不知道app.get()中的回调函数的两个参数是什么?它们都是一个对象,可以操作所有的请求与响应,req处理来自浏览器的请求,res处理响应回给浏览器
d.查看express官方文档学习req与res(学会利用资源)
查看Response即可找到app.send()方法。
通过官方文档学习才是最准确的。这里进入文档。
上面的服务器就是收到了来自浏览器8080端口的根路由的请求,然后触发了app.get("/",function())方法,然后通过app.send()响应了浏览器。更多的学习还是得靠自己看文档实际操作噢。
3.路由参数
配置路由是搭建服务器的重中之重,因为一个网站的每个功能每一个页面都对应的一个路由,比如一个视频网站,每一个视频都得有一个唯一的路由,那上千个视频你就得有上千个路由,你如何配置,像下面这样?
app.get("/movies/zhanlang",func());
app.get("/movies/baxianguohai",func());
app.get("/movies/huabu",func());
.......
每个视频都在/moives路由下,只是下一个路由对应的是片名,上面这种做法就是把一个路由给写死了。每个路由都只能配置固定得请求。
我们应该像下面这样配置路由参数:
var express=require("express");//引入express框架
var app=express();
app.listen(8080);//监听8080端口
app.get("/movies/:movesName",function(req,res){
res.send("打开某某视频");
})
console.log("node.js server is starting");
看图得结果:
我们看上面代码有什么区别吗?
区别在于在前面加了个 “:” 号,这样只要前面得路由匹配,后面无论是什么都可以被访问。
那我们在服务器如何通过请求路由获得用户想观看的视频名呢?
var express=require("express");//引入express框架
var app=express();
app.listen(8080);//监听8080端口
app.get("/movies/:movieName",function(req,res){
var movieName=req.params.movieName;
res.send(`用户想看:${
movieName}视频`);
})
console.log("node.js server is starting");
看图解释:
为什么我知道是使用req.params…来获得路由的值呢?还是查看官方文档,既然是关于req的,那肯定在上面我放出来的Request中查看学习即可。
看浏览器是否获得该路由对应值。
既然能拿到路由参数,那我们就可以只是用一条动态路由来匹配/movies路由下的请求啦,再通过获得的路由参数找到对应的资源返回给客户端即可。
还可以像下面这样匹配更复杂的路由:
app.get("/movies/:movieName/user/:loginName",function(req,res){
//.......
})
这种路由只要是:
localhost/movies/.../user/...
这类型的请求都可以匹配。
当然,你还可以在app.get()的第一个参数使用正则表达式来配置路由,原理一样。
4.查询字符串
说白了,查询字符串也是对路由的的相关操作。
查询什么字符串?就看CSDN的写作页面的地址:
注意到地址中 “?” 后面的字符串了吧,它是一对键值对。我们怎样把它取出来呢?
看下面代码:
var express=require("express");//引入express框架
var app=express();
app.listen(8080);//监听8080端口
app.get("/movies/:movieName",function(req,res){
var movieName=req.query;
console.log(movieName);
res.send(`用户想看视频`);
})
console.log("node.js server is starting");
浏览器访问页面:
服务器打印的是什么呢?
打印出空对象。
下面给地址添加上:
var express=require("express");//引入express框架
var app=express();
app.listen(8080);//监听8080端口
app.get("/movies/",function(req,res){
var movieName=req.query;
console.dir(movieName);
res.send(`看看:${
movieName.find}`);
})
console.log("node.js server is starting");
服务器能打印结果吗?
浏览器呢?
小结:req.query属性返回一个对象,通过对象属性获得键值对的值。
5.POST请求和Postman工具
a. post请求一般用于提交数据,比如表单的提交等等。
b. 可能很多人都会在前端提交表单,那我们这里就用postman来模拟表单的提交吧,同时可以学学怎么用postman工具。
c. 如果你也想用postman模拟,须先下载postman软件或者在chorme浏览器添加postman插件。
d. post请求比get请求多了一点,需先引入比较流行的库body-parser,专门用于处理post请求,想要更多了解这个库的内容请点击这里。
下面在vscode终端引入该库:
cnpm install body-parser --save
写一个post的服务器:
var express=require("express");//引入express框架
var bodyParser=require("body-parser");
var app=express();
app.use(bodyParser.urlencoded({
extended:false}));//添加通用的JSON和URL编码的解析器作为顶级中间件,该中间件将解析所有传入请求的主体。
app.use(bodyParser.json());
app.listen(8080);//监听8080端口
app.post("/",function