express框架及其部分应用

375 阅读3分钟

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'}}