Express框架入门


一、入门Express框架实例

var express = require('express');
//引入express包,返回值是一个函数
var app = express();
//调用函数得到一个对象
 
app.get('/', function (req, res) {
   res.send('Hello World');
})
//调用getAPI监听路由,这里监听根路径的,当有根路径请求时,返回Hello World。request 和 response 对象来处理请求和响应的数据。
 
var server = app.listen(8081, function () {
//监听的端口,服务启动后,触发回调函数,打印监听的IP和端口
  var host = server.address().address
  var port = server.address().port
  console.log("应用实例,访问地址为 http://%s:%s", host, port)
})

结果是cmd里打印ip和端口,localhost的8081在浏览器打开有Hello World
也可以写作:

var app = require('express')();
app.get('/',  (req, res)=> {
   res.send('Hello World');
}).listen(8081,()=>{
	console.log("running……")
})

二、托管静态文件(静态服务中间件)

什么是托管静态文件
html,js, css, image 都是存放在服务端的资源,当在浏览器中输入网址的后,我们就是向服务器请求这些资源,相对应的服务端就要有对应的路由来处理这些请求,否则就是404 not found 错误。

对于这些静态文件的路由处理,代码逻辑都是一致的,就是返回请求的文件。我们每写一个网站的服务端,都要处理这些静态文件的请求, 因为几乎所有的html文件是都包括js, css, image 文件。把这些一致的处理逻辑抽离出来,形成一个单独的组件,直接使用组件这就是express.static 中间件。

它处理js, css, image等静态文件的请求,它把我们对静态文件的路由处理封装起来。 它的参数是一个文件夹,就是当有请求过来的时候,直接到该文件来下寻找资源。我们直接把静态文件放到该文件夹,就不用写这些静态文件的路由了。(了解一下前端路由和后端路由)

这里还要注意一点,express.static 中间件的使用,要放到其它处理请求逻辑的前面, 因为页面在渲染的过程中首先请求的就是html, css, js 文件。

const express = require("express");
const app = express();
//实现静态资源服务,写入文件夹名,如public就可以访问其下的html,js, css, image等资源
let server = app.use(express.static("public"));
server.listen(3000,()=>{
	console.log("running……");
})

在这里插入图片描述在这里插入图片描述let server = app.use('/abc',express.static("public"))
还可以加一个虚拟路径,就是不存在的,访问的时候就不是上图的localhost:3000/hello.html而是变成localhost:3000/abc/hello.html

三、路由

路由决定了由谁(指定脚本)去响应客户端请求。

//http常用请求方式
const express = require("express");
const app = express();

//查询
app.get('/', (req, res)=>{
   res.send('get data');
});

//添加
app.post('/', (req, res)=>{
   res.send('post data');
});

//更新
app.put('/', (req, res)=>{
   res.send('put data');
});

//删除
app.delete('/', (req, res)=>{
   res.send('delete data');
});

直接使用use分发可以处理所有路由请求

app.use('/', (req, res)=>{
   res.send('okk');
});

四、中间件

先放个官方文档的中文链接,里面有案例,可以简单理解为处理过程中的一个环节。

1.应用层中间件

const express = require("express");
const app = express();
let total = 0;

app.use('/user',(req,res,next)=>{
	//记录访问时间
	console.log(Date.now()); 
	// next方法的作用就是把请求传递到下一个中间件
	next();
});
app. use('/user',(req, res , next)=>{
	//记录访问日志
	console.log('访问了/user');
	next();
});
app.use('/user', (req,res)=>{
	total++;
	console.log(total);
	res.send('result');
});

最后页面会显示result,每个函数都会被执行,因为next();这个属于应用级别的中间件。

2.路由中间件

如果不写next()会无法打印2,网页一直请求直到超时报错。

const express = require('express');
const app = express();

app.get('/abc',(req,res,next)=>{
	console.log(1);
	next(); 
}, (req,res)=>{
	console.log(2);
	res.send('abc');
});

app.listen(3000,()=>{
	console.log('running...');
});

下面这种情况,网页有hello,会打印13,不会打印2。因为一个路由是指通过get、post、use等方法绑定的方法,1和2算作一个路由里的两个中间件。

const express = require(' express' );
const app = express();

app.get('/abc',(req,res,next)=>{
	console.log(1);
	//跳转到下一个路由
	next('route');
}(req,res)=>{
	console.log(2);
	res.send('abc');
});

app.get(' /abc',(req,res)=>{
	console.log(3);
	res.send('hel1o');
});

app.listen(3000,()=>{
console.1og(' running...');
});

3.第三方中间件

详见这里,需要额外下载嚯。
用post去提交参数时:

const express = require('express');
const app = express(); 
const bodyParser = require('body-parser')

//挂载内置中间件
app.use(express . static('publid'));

//挂载参数处理中间件
app.use(bodyParser.urlencoded({ extended: false}));
app.post('/login',(req,res)=>{
	let data = req.body;
	if(data.username == 'admin' && data. password == '123' ){
		res.send('success');
	}else{
		res.send('failure');
	}
});

app.listen(3000,()=>{
	console.log('running...');
});
<body>
	<form action="http://localhost: 3000/login" method="post" >
		用户名: <input type="text" name="username"><br>
		密码: <input type="password" name=" password"><br>
		<input type="submit" value=" 提交">
	</form>
</body>

将form的method改为get,用get提交参数使用query对象

//处理get提交参数
app.get('/login' ,(req,res)=>{
	let data = req.query;
	console.log(data);
	res.send('get data');
});


以上为该参考视频的笔记
可以参考帮助理解的小案例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值