Express 框架
是基于Node平台的web应用开发框架,提供一些强大的特性,创建web应用
特性
1、提供了方便简洁的路由定义方式
2、对HTTP请求参数进行了简化处理
3、对模板引擎支持程度高,方便渲染HTML页面
4、提供了中间件技术,有效控制HTTP请求
5、中间件的拓展
在框架中所涉及的路径问题总结
关于文件路径问题,我们在静态文件引用、渲染模板文件、模板文件内部引用中都会遇到
express.static(path.join(__direname,'pulic')配置了静态资源的路径,接下来模板中静态资源路径也因此而确定
app.set('views',path.join(__direname,'views')配置了程序中所有模板文件的前缀
对于模板文件中<a> 标签中href问题,究其本源就是对服务器的请求,所欲它的设置路径和设置路由类似。只需服务器路由对请求做出响应的response
中间件是一对方法,可以对客户端发来的请求做出响应
app.get('/get',(req,res,next)=>{
req.name='zhangsan'
next();交给下一个中间件
})
错误处理中间件
app.use((err,req,res,next)=>{
res.status(500).send('出现了问题',err.massage)
}只能捕获同步代码
对于异步代码,则选择用next(err)手动调用,处理错误
特别注意的是,错误中间件接受消息的变量为err,并且只接收字符串格式
所以需要next(Json.stringnify(对象))
try{要测试的语句}catch(ex){捕捉错误信息}
构建模块化路由
const home=express.Router();
app.get('/home',home);
home.get('/index',(req,res)=>{res.send(})
当我们想将模块导出时,我们可以用module.exports=home;
引入模块时,我们可以用require('./route/home.js')
GET请求处理
我们不再需要对url进行解析,得到请求信息,而是通过req.query即可获得GET参数,框架内部会将参数转换为对象并返回
POST请求参数
需要借助第三方包body-parser,这个包是express提供的第三方包
app.use(bodyParser.urlencoded({extended:false}))
拦截所有请求,检测请求是否有内容,如果有就进行处理
当接收post请求参数时,req.body处理请求参数
Expre路由参数
app.get('/find/:id',(req,res)=>{
res.send(res.params)
}
对应的地址localhost/find/23
静态资源访问
app.use(express.static('public'));
判断发来的请求是不是静态资源请求,其中public目录推荐写绝对路径
模板引擎
express-art-tempalte
app.engine('art',require('express-art-template')
当渲染后缀为art的模板时,我们使用express-art-template
app.set('views',path.join(__dirname,'views'));
设置存放位置,其中第一项是固定的,配置项的名字
app.set('view engine','art')
设置模板默认后缀为art
res.render('/index',(req,res)=>{msg:'message'})帮助我们做了很多的事情
1、拼接模板路径
2、拼接模板后缀
3、模板和那些数据进行拼接
4、将拼接结果响应给客户端
app.local对象
将变量设置到local对象下面去,这个数据在所有的模板中都可以获得
添加属性即可添加数据
Joi
const Joi =require('joi');
引入模块,并创建规则
const schema={
username:Joi.string(//这是自负床类型的).alphanum(//这是英文字母).min().max().error(new Error('错误信息')
}
Joi.validate({要验证的对象},schema)
关于日期格式的模块
npm install dateformat下载第三方模块
//dateform进行全局配置
const dataFormat=require('dateformat');
//导入art-template
const template=require('art-template');
tempalte.defaults.imports.dateFormat=dateFormat;
//向模板内导入dateFormat变量
在art文件中,就可以直接调用dateFormate函数
{{dateFormat($value.pubishDate,'yyyy-mm-dd'}}