Express服务器开发

作者 | Jeskson
来源 | 达达前端小酒馆
Express服务器开发
创建Express应用程序,Express路由,pug视图模板的使用
Express简介:
让我们来创建Express应用程序,Express是一个Node.js Web应用框架,它很强大,可以为用户创建各种Web应用和HTTP工具,使用Express框架可以搭建一个完整功能的网站。
Express框架的优点:
可以用中间件来响应HTTP请求,可以定义路由表用于执行不同的HTTP请求,可以向模板传参数来动态渲染HTML页面。
命令行安装Express框架:
cnpm install express --save
Express框架安装在node_modules目录中,然后需要一起安装如下模块:
body-parser是node.js的中间件,可以处理JSON,Raw,Text,URL编码的数据,cookie-parser是一个解析Cookie的中间件,然后通过req.cookies可以获取传过来的Cookie,并转为对象。
multer是node.js的中间件,用于处理enctype="multipart/form-data"的表单数据。
cnpm install body-parser --save
cnpm install cookie-parse --save
cnpm install multer --save
让我们来看看express框架的版本号:
cnpm list express
创建第一个Express框架实例
目的为了输出:“hello”,命名:express_demo.js文件
// 引入node模块
const express = require('express');
// 创建express程序
const app = express();
// 添加HTTP路由
app.get('/', function(request, response){
// 输出响应消息
response.send('hello express');
});
// 启动HTTP服务器
app.listen(8080, function(){
console.log('express app');
});
执行项目:
node express_demo.js
然后就可以用http://127.0.0.1:8080
express框架使用request对象和response对象来处理请求和响应的数据:
app.get('/', function(req,res){
})
request对象为HTTP请求
req.app
为callback,回调函数外部文件,利用req.app访问express的实例
req.baseUrl
获取当前安装的URL路径
req.body/req.cookies
为获得“请求主体”
req.hostname/req.ip
获取主机名,ip地址
req.originalUrl
获取原始请求URL
req.params
获取路由的参数
req.path
获取请求路径
req.protocol
获取协议类型
req.query
获取URL的查询参数
req.route
获取当前匹配的express路由
req.subdomains
获取子域名
req.accepts()
检查可接受请求的文档类型
req.get()
获取指定的HTTP请求头
req.is()
判断请求头Content-Type的Mime类型
response对象为HTTP响应
res.app
为callback,回调函数外部文件,利用res.app访问express的实例
res.append()
追加指定HTTP请求头
res.set()
在res.append()后重置之前设置的请求头
res.clearCookie()
清除Cookie
res.download()
传送指定路径的文件
res.get()
返回指定的HTTP请求头
res.json()
传送json响应
res.jsonp
传送jsonp响应
res.location()
只设置响应的LocationHTTP请求头,不设置状态码或者close response
res.redirect()
设置响应的LocationHTTP请求头,并且设置状态码302
res.send()
传送HTTP响应
res.status()
设置HTTP状态码
res.type()
设置Content-Type的MIME类型
express路由
express路由,由URI,HTTP请求和若干个句柄组成。
// 引入node模块
const express = require('express');
// 创建express程序
const app = express();
// 添加http路由
app.get('/',function(request,response) {
// 输出响应消息
response.send('hello dashucoding');
});
app.get('/users', function(req,res) {
// req , res
res.send('user');
});
// 启动HTTP服务器
app.listen(8080, function(){
console.lo('express app');
});
GET
请求一个指定资源的表示形式,只用于获取数据
POST
用于将尸体提交到指定的资源
HEAD
请求一个与GET相同的响应,但没有响应体
PUT
用于请求有效载荷替换目标资源的所有当前表示
DELETE
删除指定的资源
CONNECT
建立一个由目标资源标识的服务器的隧道
OPTIONS
用于描述目标资源的通信选项
PATCH
用于对资源应用部分修改
app.get('/about',function(req,res){
res.send('about');
});
app.get('/ab?cd',function(req,res){
res.send('ab?cd');
}
app.get('/ab(cd)?e',function(req,res){
res.send('ab(cd)?e');
});
路由句柄,为请求处理提供多个回调函数,next('route')方法
let d1 = function(req,res,next){
console.log('1');
next();
};
let d2 = function(req,res,next){
console.log('2');
next();
});
let d3 = function(req,res,next){
console.log('3');
next();
});
app.get('/', [d1,d2]);
next用于执行下一个回调函数,next('route')用于执行下一个相同路由。
// 引入node模块
const express = require('express');
// 创建express程序
const app = express();
// 添加http路由
app.get('/', function(request, response){
// 输出响应消息
response.send('hello');
});
app.get('/users', function(req,res){
res.send('user');
});
// 动态
app.get('/users/id', function(req,res){
let id = req.params.id;
// 返回响应
res.send('id='+id);
});
// 启动HTTP服务器
app.listen(8080,function(){
console.log('expresss app');
});
const express = require('express');
const app = express();
app.get('/', function(request, response){
response.send('hello');
});
app.get('/users',function(req,res){
res.send('users');
});
app.param('id',(req,res,next)=>{
console.log('hello');
if(req.params.id==='1'){
next();
}else{
res.sendStatus(404);
}
});
app.get('/users/:id',(req,res)=>{
res.send('hello');
});
// 启动服务器
app.listen(8080,function(){
console.log('express');
});
pug视图模板
命令行下载:
npm install pug
pug.compile()将pug代码编译成一个JavaScript函数。
app.js
const express = require('express');
const app = express();
// 配置视图模板
app.set('view engine', 'pug');
app.set('views', './views');
// 添加HTTP路由
app.get('/', function(request, response){
response.render('index.pug');
// 输出响应消息,加载并解析index.pug文件
});
app.get('/users',function(req,res){
res.render('users.pug',{
title:'user',
users:[
{id:1,name:'张三',age:18}
]
});
});
// 启动HTTP服务器
app.listen(8080,function(){
console.log('express');
});
users.pug:
doctype html
html
head
meta(charset="utf-8")
title #{title}
body
#app
for user in users
div
p id=#{user.id}
p name=#{user.name}
p age=#{user.age}
pug.render()模板函数:
const pug = require('pug');
console.log(pug.renderFile('template.pug',{
name:'dada'
});
执行pug.renderFile()函数,会把编译出来的函数自动储存到内部缓存中
❤️ 不要忘记留下你学习的脚印 [点赞 + 收藏 + 评论]
作者Info:
【作者】:Jeskson
【原创公众号】:达达前端小酒馆。
【福利】:公众号回复 “资料” 送自学资料大礼包(进群分享,想要啥就说哈,看我有没有)!
【转载说明】:转载请说明出处,谢谢合作!~
大前端开发,定位前端开发技术栈博客,PHP后台知识点,web全栈技术领域,数据结构与算法、网络原理等通俗易懂的呈现给小伙伴。谢谢支持,承蒙厚爱!!!
若本号内容有做得不到位的地方(比如:涉及版权或其他问题),请及时联系我们进行整改即可,会在第一时间进行处理。
请点赞!因为你们的赞同/鼓励是我写作的最大动力!
欢迎关注达达的CSDN!
这是一个有质量,有态度的博客

Express服务器开发的更多相关文章
- NodeJS+Express+MySQL开发小记(2):服务器部署
http://borninsummer.com/2015/06/17/notes-on-developing-nodejs-webapp/ NodeJS+Express+MySQL开发小记(1)里讲过 ...
- express框架开发案例
express是基于Node.js平台的web应用开发框架,用express框架开发web项目可以直接构建整个项目框架并且将前端页面跟后台贯穿起来,用起来还是灵活的:最近刚开始学习,写篇博客总结下,涉 ...
- C++服务器开发之笔记三
为什么需要原子性操作? 我们考虑一个例子:(1)x++这个常见的运算符在内存中是怎样操作的?从内存中读x的值到寄存器中,对寄存器加1,再把新值写回x所处的内存地址 若是有两个线程同时对同一个变量++, ...
- Python09作业思路及源码:高级FTP服务器开发(仅供参考)
高级FTP服务器开发 一,作业要求 高级FTP服务器开发 用户加密认证(完成) 多用户同时登陆(完成) 每个用户有不同家目录且只能访问自己的家目录(完成) 对用户进行磁盘配额,不同用户配额可不同(完成 ...
- linux服务器开发浅谈
[开发前准备] 在进行linux服务器开发之前,必须很清楚地了解所开发的对象需要考虑的相关问题比如:功能架构:提供服务的模块体系结构稳定性:服务器的出core率,内存泄露情况性能:请求与返回的速度与正 ...
- linux下http服务器开发
linux下http服务器开发 1.mystery引入 1)超文本传输协议(HTTP)是一种应用于分布式.合作式.多媒体信息系统的应用层协议 2)工作原理 1)客户端一台客户机与服务器建立连接后,会发 ...
- NIO原理剖析与Netty初步----浅谈高性能服务器开发(一)
除特别注明外,本站所有文章均为原创,转载请注明地址 在博主不长的工作经历中,NIO用的并不多,由于使用原生的Java NIO编程的复杂性,大多数时候我们会选择Netty,mina等开源框架,但理解NI ...
- 基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统
很久没更新博客,最近也有点忙,然后业余时间搞了一个比较完整基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统的流程系统,希望对 ...
- openfire:基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件
基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件 上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfir ...
随机推荐
- vue中mode hash 和 history的区别
对于 Vue 这类渐进式前端开发框架,为了构建 SPA(单页面应用),需要引入前端路由系统,这也就是 Vue-Router 存在的意义.前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求. ...
- linux系统中启动daytime服务
环境:vmware下面的cetos6 1. 进入/etc/xinetd.d/目录下,查看是否存在daytime服务,若不存在,则须安装: 执行命令:yum install xinetd 该命令执行后会 ...
- LeetCode 733: 图像渲染 flood-fill
题目: 有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间. An image is represented by a 2-D array of int ...
- pycharm报错:ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory
pycharm报错:ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory ...
- raspberry pi 4b 常见的一些配置信息
实验记录地址 https://gitee.com/dhclly/icepi.raspberry-pi 针脚图 面包板 gnd & vcc VCC:电路的供电电压: GND:指板子里面总的地线. ...
- C#使用FileSystemWatcher来监控指定文件夹,并使用TCP/IP协议通过Socket发送到另外指定文件夹
项目需求: 局域网内有两台电脑,电脑A(Windows系统)主要是负责接收一些文件(远程桌面粘贴.FTP上传.文件夹共享等方式),希望能在A接收文件后自动传输到电脑B(Windows系统)来做一个备份 ...
- WebApi使用Unity实现IOC
最近在学习ASP.NET MVC,使用Unity作为依赖注入容器.分别在WebAPI和MVC中使用.这篇文章介绍WebAPI,MVC的在下篇文章中介绍.下面是学习的一点经验. 一 IOC简单介绍 Io ...
- Asp.netCore 3.0 Web 实现Oauth2.0微信授权登陆的测试
1:Oauth2.0授权的流程截图 官方流程如下: 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果 ...
- C#进阶之路(八)集合的应用
集合是我们编程时候常用的类库,本文主要讨论具体每个类型的区别,每个集合对应的时间复杂度.先上一个时间复杂度图: C#集体类型( Collections in C#) 集合是.NET FCL(Frame ...
- 分布式Redis深度历险-复制
Redis深度历险分为两个部分,单机Redis和分布式Redis. 本文为分布式Redis深度历险系列的第一篇,主要内容为Redis的复制功能. Redis的复制功能的作用和大多数分布式存储系统一样, ...