Express NodeJs Web框架学习笔记(二)

原文链接 燕归来兮 - Express NodeJs Web框架学习笔记(二)

继续之前的学习,之前学了简单Express不是以及安装的使用方法,下面我们进一步学医Express路由,中间件以及数据库持久化处理

Route模块

在上面示例中,我们可以使用下面的代码创建路由

var express = require('express')
var app = express()

app.get("/",function(req,res,next){})

app.get("/book",function(req,res,next){})

app.post("/book",function(req,res,next){})

显然这样并不利于我们的代码管理,因此这里引入express.Route模块来模块化处理路由,下面我们有如下需求:

  • 创建 GET /

  • 创建 GET /book/nodejs

  • 创建POST /book/

    其中 /book/**单独存放于路由模块中

app.js同级目录下创建book.js文件代码内容如下:

var express = require('express');
// 创建router
var router = express.Router();

// 在router中设置路由
router.get('/:id', function (req, res, next) {
    var book = {
        id: req.params.id,
        name: "深入浅出NodeJS"
    };
    res.send(JSON.stringify(book))
});

router.post("/", function (req, res, next) {
    res.send("POST /book")
});

// 对外暴露
module.exports = router;

同样的app.js则需要引入上面router文件

// 引入依赖
var express = require('express')
var app = express()

// 引入router
var book_router = require('./book')

// 定义port常亮
const port = 3030;


// app 使用该router
app.use('/book',book_router)

// 创建一个简单GET路由
app.get("/",function(req,res){
    res.send("Hello,World");
});


// 启动服务,第二个参数为callback() 
app.listen(port,function(){
    console.log(`Express 应用启动在${port} 端口`);
});

启动应用,在命令行中访问,即结果如下:

$ curl -XGET http://localhost:3030/             
Hello,World

$ curl -XGET http://localhost:3030/book/ISBN-123
{"id":"ISBN-123","name":"深入浅出NodeJS"}

$ curl -XPOST http://localhost:3030/book/       
POST /book

NodeJs中的中间件

中间件,英文middleWare ,假设我们需要在控制台打印所有请求的消耗的时间信息,以及URL,那么我们给每个路由都加上代码,显然是很愚蠢的,那么我们可以为这些路由请求设置中间件,利用中间件来而完成统计.

修改appjs代码为以下内容:

// 引入依赖
var express = require('express')
var app = express()

const port = 3030

/**
 *  定义中间件函数
 * @param req   ---> requesr
 * @param res   ---> response
 * @param next  ---> 将请求传递到下一个中间件函数
 */
function logMiddleWare(req, res, next) {
    var url = req.originalUrl;
    // 记录开始执行时间
    var start = Date.now();
    // 向request中写入数据,在后面的中间件函数中可以获取到该参数
    req.start_time = start
    // 执行下一个中间件函数(在这里也就是路由的callback)
    next();
    // 记录完成时间
    var end = Date.now();
    // 打印日志
    console.log(`${url} 请求完成时间:`, end - start, "ms");
}

// 使用该中间件
app.use(logMiddleWare)

app.get("/time", function (req, res, next) {
    console.log(`获取到的参数start_time = ${req.start_time}`);
    res.send(`<h1>/${req.start_time}</h1>`);
});

// 服务启动
app.listen(port, function () {
    console.log(`服务启动在${port} 端口`);
});

我们测试以下:

curl -XGET http://localhost:3030/time 返回<h1>1541220185998</h1>,这里主要看一下控制台打印的信息

服务启动在3030 端口
获取到的参数start_time = 1541220185998
/time 请求完成时间: 6 ms

可以看到,首先是服务启动在3030 端口信息,接着我们开始请求/time,记录下了start_time,并写入到request中,接着在/time的回调函数中打印了该参数,执行完成之后,继续返回到 logMiddleWare 中记录下end_time,打印出耗时 6 ms

集成持久层(redis)

NodeJS支持多种数据库持久操作,比如常用的Redis,Mysql,MongoDB等等,那么这里我们简单的使用redis作为测试以下.首先说一下需求:

  • 创建一个请求为 POST /redis/:content 将content写入到redis中

  • 创建一个请求为 GET /redis 用户获取之前的设置

Ps: 这里我是用了docker来部署了一个redis服务器,如下

$ docker pull redis
$ docker run -d -p 6379:6379 --name redis_6379 redis
$ docker ps # 观察Redis运行情况
# 重启redis  `docker restart redis_6379`

首先你需要安装redis依赖,项目目录下执行npm install redis --save安装即可,修改app.js内容如下

// 引入依赖
var express = require('express');
var redis = require('redis')
var app = express()

const port = 3030
const redis_port = 6379

// 创建Redis client 端口为6379
var client = redis.createClient(redis_port,'localhost');

/**
 * 设置Redis的回调事件,当redis出现连接失败的时候,执行之
 */
client.on('error',function (error) {
    console.log("Redis 连接出现异常")
});


app.post("/redis/:content",function (req, res, next) {
    var content = req.params.content;
    // 设置字符串到redis中 KV结构
    client.set('KEY',content)
    res.send("Redis设置完成")
})

app.get("/redis",function (req, res, next) {
    client.get('KEY',function (err, value) {
        res.send(value)
    })
})

// 服务启动
app.listen(port, function () {
    console.log(`服务启动在${port} 端口`);
});

测试内容如下

$ curl -XPOST http://localhost:3030/redis/Keep_it_simple_and_stupid
Redis设置完成

$curl -XGET http://localhost:3030/redis 
Keep_it_simple_and_stupid 

当然也可以在Redis客户端中查询数据

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值