node.js的express框架学习全套总结以及推荐8个实用的常用库(前端入门后端)

本文是作者作为前端学生学习后端的笔记,详细介绍了Node.js中Express框架的使用,包括请求与响应、路由参数、查询字符串、POST请求、文件上传、模板引擎的使用、中间件等核心概念,并推荐了body-parser、multer、ejs等实用库。通过实例展示了如何处理GET和POST请求,以及如何上传和处理文件。同时,文章还探讨了模板引擎的动态数据绑定和共享模板的实现,最后提到了npm包管理、cnpm的使用以及一些常用的辅助库。
摘要由CSDN通过智能技术生成

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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值