Express基础篇

开始语法

npm i express复制代码

const express = require('express');
const app = express();
app.use('/',(req,res,next)=>{
    res.send('Hello World');
})
app.listen(3000);复制代码

路由(express自带路由)

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

// 1、获取路由中间件
let router = express.Router();

// 2、配置路由(get、post)
router.get('/',(req,res)=>{
    res.end('index Page');
})

router.get('/login',(req,res)=>{
    res.end('Login Page');
})

// 将Router中间件应用到 app 上面
app.use(router);

app.listen(3000);复制代码

res扩展

常用的res扩展

  • res.download() //下载文件
  • res.json() // 响应Json对象
  • res.jsonp() // 配合jsonp 要求客户端请求方式也是Jsonp
  • res.redireact() //重定向,301永久重定向,302临时重定向
  • res.send() //发送字符串数据自动加content-type
  • res.sendFile() //显示一个文件
  • res.sendStatus() //响应状态码

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

// 1、获取路由中间件
let router = express.Router();

// 2、配置路由(get、post)
router.get('/',(req,res)=>{
    res.end('index Page');
})

router.get('/login',(req,res)=>{
    res.end('Login Page');
})

router.get('/resfunction',(req,res)=>{
    res.download('xxxx.png'); //下载文件路径

    res.redirect('http://www.baidu.com'); //重定向
    //res.redireact(301,'http://www.baidu.com');
    
    res.jsonp({user: 'tobi'}); //jsonp  =>foo({"user": "tobi"})

    res.json([{name: 'jack'}])
})


// 将Router中间件应用到 app 上面
app.use(router);

app.listen(3000);复制代码

模板渲染

#### 使用art-template模板引擎 

- 下载express-art-template art-template 

- app.js中配置 

 - 注册一个模板引擎 

 - `app.engine('.html',express-art-template);` 

 - 设置默认渲染引擎```app.set('view engine','.html');``` 

 - res.render(文件名,数据对象); 

 - express这套使用,默认在当前app.js同级的views目录查找

npm i express-art-template art-template复制代码

const express = require('express');

let app = express();

// 注册模板引擎
app.engine('.html',require('express-art-template'));

// 设置默认模板引擎
app.set('view engine','.html');

// 区分开发和生产环境的不同配置
app.set('view options',{
    /*
        debug: 不压缩,不混淆代码,实时保持最新数据
        非debug: 压缩、合并代码,静态数据不实时更新(服务器重启才更新)
    */
    debug: precess.env.NODE_ENV !== 'production',
    
    imports: {
        num: 1,
        uppCase: function(str){
            return str.toUpperCase();
        }
    }
})

let router = express.Router();
router.get('/list',(req,res)=>{
    // 渲染模板
    res.render('list.html',{
        lists: [{
            name: 'Jack',
            age: 12
        },{
            name: 'Jonn',
            age: 13
        }]
    }
})

app.use(router);
app.listen(3000);
});复制代码

list.html

<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
    lists Page
    <hr/>
      imports.num: {{ num }}
      imports.reverse   {{ uppCase('abcde')   }}    <hr/>
    <ul>
      <!-- 循环语句(art-template语法) -->
      {{each lists}}
        <li>{{$value.name}}</li>
      {{/each}}
    </ul>
</body>
</html>复制代码

静态文件

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

let server = express();

server.engine('.html',require('express-art-template'));

server.set('view options', {
    debug: process.env.NODE_ENV !== 'production',
});

// 配置默认渲染引擎
server.set('view engine','.html');

let router = express.Router();

router.get('/',(req,res,next) => {
  // 假如获取文件
  let errorPath = './abc/e.txt';
  try {
     fs.readFileSync(errorPath);
     res.render('index');
  } catch (err) {
    next(err); // 触发一个具备4个参数的中间件函数
  }

})
// 当访问的地址不存在时,提示地址错误
router.all('*',(req,res)=> {
  res.send('地址错误');
})

// 要把public下的文件暴露出来
server.use(express.static('./public'));  

server.use(router);

// 处理文件不存在错误(参数位置错误优先) -> 优雅的用户体验
server.use((err,req,res,next) => {
  res.send('文件不存在');
})

server.listen(8888);复制代码

formidable中间件(解析上传文件)

npm i formidable复制代码

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

let app = express();
let router = express.Router();
router.post('/upload',(req,res)=>{
    let form = new formidable.IncomingForm();
    form.uploadDir = 'xxx'; // 文件上传的路径
    form.keepExtensions = true; //上传文件是否保留扩展名
    form.parse(req,(err,fields,files)=>{
        // fields 数据相关
        // files 文件相关
        
    })
})
app.listen(3000);复制代码

body-parser中间件

npm i body-parser复制代码

const express = require('express');
const bodyParser = require('body-parse');

let app = express();

app.post(bodyParser.urlencoded({
            extends: flase;
});

app.post('post',(req,res)=>{
    // bodyParser中间件主要用来解析POST提交方式Body的数据
    console.log(req.body);
});

app.listen(8080);复制代码

multer中间件

multer中间件只能够处理文件上传,普通body数据解析不了,通常与body-parser混用,form表单上传时,需要设置提交方式为POST,enctype="multiparty/form-data"

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

let app = express();
app.listen(3000);

let obj = multer({
    dest: './xxx/xxx'; //文件上传的路径
 });

app.use(obj.any()); //通过obj可以设置文件上传的类型

app.post('upload',(req,res)=>{
    // 上传文件的信息在files里面
    console.log(req.files);
});复制代码

cookie

npm i cookie-parser复制代码

const express = require('express');
const cookieParser = require('cookie-parser');

let app = express();
app.liten(3000);

app.use(cookieParser(
    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' //cookie秘钥
}

app.get('/',(req,res)=>{
    console.log('cookie',req.cookies); //获取未签名的cookie
    console.log('signedcookie',req.signedCookies); //获取签名的cookie

    // 设置cookie
    res.cookie('name',value,{
        domain: 'baidu.com', 
        path: '/',
        maxAge: 10*86400*1000,    //有效期
        httpOnly: true,    
        secure: true,    //安全cookie,是否只有https才能使用该cookie
        signed: true    //是否签名
    })
})复制代码

session

npm i cookie-session
复制代码

const express=require('express');
const cookieSession=require('cookie-session');

let app = express();
app.listen(8080);

//
app.use(cookieSession({
  keys: ['asdfwqw4r4r343fdgsdfg', 'safdas454trgtrthdfthd', 'dfsdfgdfyrt6u6t7yit7u'], //循环秘钥
  maxAge: 20*60*1000      //20分钟
}));

//
app.get('/a', (req, res)=>{
  //console.log(req.session);
  if(!req.session['view']){
    req.session['view']=1;
  }else{
    req.session['view']++;
  }

  req.session['amount']=99.8;

  res.send(`欢迎你第${req.session['view']}到访本站,你的余额是:${req.session['amount']}`);
});
复制代码


转载于:https://juejin.im/post/5cc2528f6fb9a0320d60f07e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值