Express 是一个基于 Node.js 封装的上层服务框架,它提供了更简洁的 API 更实用的新功能。它通过中间件和路由让程序的组织管理变的更加容易。
如果需要跟加进一步的了解建议去 express官网看。没时间写那么详细,我只是把自己之前学习的一些笔记简单记录下来,如果有问题可以找我探讨。
使用:
1.下载 安装 npm install express --save
2.引入
3.创建一个server
4.监听
5.get(二级-三级。。。地址,function(req,res){})
.post(二级-三级。。。地址,function(req,res){})
.use(二级-三级,function(req,res){});
require('url');
on('data');
on('end')
中间件
作用是拓展功能、处理数据(便捷)
const express = require('express');
const server = express();
server.listen(1273);
server.use(function(req,res,next){
console.log('你好我是user01');
next();
});
server.use(function(req,res,){
console.log('你好我是user02');
})
上面是运行结果是:你好我是user01 --> 你好我是user02
因为使用了 next() ,这个中间件。
在express中 GET、POST的参数解析等也是可以使用方便的第三方的处理(上篇说到ajax的封装中就讲过了怎么实现和封装)。
express-static 读取输出
var express = require('express');
var bodyParser = require('body-parser');//解析body,尤其是复杂的对象参数
var static = require('express-static'); // 中间件(托管静态文件)
var server = express();
server.listen(1767);
server.use(bodyParser.urlencoded({}));
server.use('/user',function(req,res,next){
console.log(req.body);
// body 是POST请求
if(req.body.user == 'Anny' && req.body.pass =='123456'){
res.send('ok')
}
else{
res.send('no ok!');
}
//res.send({a:10});
//next();
});
server.use(static('./www')); // www目录下的图片、CSS 文件、JavaScript 文件对外开放访问了
如果wwww 文件里面有文件就可以直接读取出来。
- next();
表示,如果下面还有其它的中间件,就执行,否则就不执行。
app.use('',function (res,req) {
console.log("我是user01");
//next(); // 如果不使用next,返回的结果是 : 我是user01
});
app.use('',function (res,req) {
console.log("我是user02");
});
如果使用了 next() 。输出是:我是user01 我是user02
如果是get的数据,直接使用 req.query 解析就OK了。
默认解析了,直接使用。
- 插件 body-parser ,解析body参数
const express = require('express');
const bodyParser = require('body-parser');
const static = require('express-static');
const multer = require('multer');// 专门用来解析上传文件的
const server = express();
server.listen(3000);
server.use(bodyParser.urlencoded({})); // 通中间件,解析body参数
server.use(multer({dest:'地址值'}).any()); // 可以上传任意的文件
- multer 专门用来解析上传文件的(需要添加条件)
multer的 dest 默认解析出来是哈希值,没有后缀。
需要 使用中间件 path 解析。path.parse() 解析返回的是一个对象(文件名和后缀都有)
{root:'/',dir:'' ,base:'xxx.docx', ext: '.docx', name:''}
{root是 在什么根目录,dir是 绝对路径 ,base是 文件名+后缀,ext是 后缀,name是 什么文件名}
server.use('/user',function(req,res,next){
console.log(req.body); //查看解析后的body参数
if(req.body.user == 'xiaoming' && req.body.pass =='123456'){
res.send('ok')
}
else{
res.send('no ok!');
}
//res.send({a:10});
//res.write();
//res.end();
//next();
});
server.use(static('./www')); // 能改变文件地址
express-static
能改变文件地址
利用中间件
如果有这个文件就读出来显示 wwwres.end();响应
var express = require('express');
var app = express();
// 一个简单的 logger
app.use(function(req, res, next){
console.log('%s %s', req.method, req.url);
next();
});
// 响应
app.use(function(req, res, next){
res.send('Hello World');
});
app.listen(3000);
- router 路由
路由使用非常频繁,它的作用就是帮助大家把目录结构分的更加的详细。下面举个例子:
const express = require('express');
// 初始化
const userRouter = express.Router();
const newsRouter = express.Router();
const app = express();
app.listen(3000);
app.use('/user',userRouter); // 这里 "/user" 表示把大模块拆分成小模块了。
app.use('/news',newsRouter);
// 小服务
userRouter.use('/xiaoming',function(req,res){
res.send('user 小明!')
})
userRouter.use('/test',function(req,res){
res.send('哈哈哈,测试test!')
})
newsRouter.use('/newsTest',function(req,res){
res.send('渲染新闻')
})
// 这是没有拆分模块化的做法,不推荐
//app.use('www.baidu.com/news/xxxx',function(){});
//app.use('www.baidu.com/list/xxxx',function(){});
//app.use('www.baidu.com/users/xxxx',function(){});
...
在浏览器输入的基础路径+/user/xiaoming -----> 结果是: “user 小明!”
在浏览器输入的基础路径+/user/test -----> 结果是: “哈哈哈,测试test!”
下篇:cookie及cookie加密