热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ExpressNodeJsWeb框架入门笔记

Express是一个简洁而灵活的node.jsWeb应用框架,提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。使用Express可以快速地搭建一个完整

Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

  • 使用 Express 可以快速地搭建一个完整功能的网站。
  • Express 框架核心特性:
  • 可以设置中间件来响应 HTTP 请求。
  • 定义了路由表用于执行不同的 HTTP 请求动作。
  • 可以通过向模板传递参数来动态渲染 HTML 页面。

前提知识
  • NodeJs

  • NPM

创建项目
  • 初始化

这里我们使用npm初始化一个项目,直接回车使用默认参数

$ mkdir ~/myExpress
$ cd ~/myExpress
$ npm init  
  • 安装Express
$ npm install express --save
  • 创建入口文件app.js
$ touch app.js

基础示例

使用IDE打开项目(推荐Vscode或者WebStorm) 编辑app.js文件

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

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

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

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

命令行切换到app.js目录下

$ node app.js

打印出Express 应用启动在3030 端口,在浏览器或者CURL访问http://localhost:3030即可看到Hello,World

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

路由设置

在上面的代码示例中我们使用了一个简单HelloWorld代码,使用了GET的请求方式,同样的Express也支持其他的Method,如POST,PATCH,DELETE等等,下面我们简单的写一下

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

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

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

app.post("/post",function(req,res){
    var method = req.method;
    res.send(`发现${method} 请求`)
});

app.patch("/patch",function(req,res){
    var method = req.method;
    res.send(`发现${method} 请求`)
});

app.delete("/delete",function(req,res){
    var method = req.method.name;
    res.send(`发现${method} 请求`)
});

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

如果你需要添加全部的请求方式,可以使用app.all(path,callback);

由于POST等请求不能再浏览器输入地址访问,这里我们继续使用CURL来测试,没有这个工具的可以使用PostMan测试.

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

$ curl -XPOST http://localhost:3030/post   
发现POST 请求

$ curl -XPATCH http://localhost:3030/patch  
发现PATCH 请求

$ curl -XDELETE http://localhost:3030/delete
发现DELETE 请求 

静态文件

Express可以设置某个目录为静态文件目录,里面的资源我们可以直接通过URL访问,在app.js同级目录下执行以下脚本

$ mkdir public && cd public
$ echo "

这里是静态资源文件内容> ./static.html

修改app.js文件,添加以下代码

app.use(express.static('public'))

访问http://localhost:3030/static.html

$ curl -XGET http://localhost:3030/static.html

这里是静态资源文件内容

同样的,你也可以放入其他类型的资源,如JSON文件,图像,纯文本,CSS等.

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(`

/${req.start_time}

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

我们测试以下:

curl -XGET http://localhost:3030/time 返回

1541220185998

,这里主要看一下控制台打印的信息

服务启动在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客户端中查询数据


推荐阅读
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • feat: Enhances Jest Testing Capabilities with Snapshot Support ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • Vue应用预渲染技术详解与实践 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • npm 安装出错,求助高手分析原因并提供解决方案 ... [详细]
  • 如何在 Node.js 环境中将 CSV 数据转换为标准的 JSON 文件格式? ... [详细]
  • 深入探索Node.js新框架:Nest.js第六篇
    在本文中,我们将深入探讨Node.js的新框架Nest.js,并通过一个完整的示例来展示其强大功能。我们将使用多个装饰器创建一个基本控制器,该控制器提供了多种方法来访问和操作内部数据,涵盖了常见的CRUD操作。此外,我们还将详细介绍Nest.js的核心概念和最佳实践,帮助读者更好地理解和应用这一现代框架。 ... [详细]
  • 优化Node.js项目:有效管理和清理依赖项
    在Node.js项目中,有效管理和清理依赖项是提升性能和安全性的重要步骤。为了确保项目中仅保留必要的库,应定期检查并移除`node_modules`目录下不再使用的包。同时,所有必需的依赖项都应在`package.json`文件中明确列出,以保证项目的可维护性和可复现性。此外,利用如`npm prune`等工具可以帮助自动化这一过程,进一步提高效率。 ... [详细]
author-avatar
0o墨滴成殇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有