express 的入门学习笔记

express 的入门学习笔记

零、参考文章

https://developer.mozilla.org/zh-CN/docs/Learn/Server-side/Express_Nodejs

一、node.js

hello world

// 调用 HTTP 模块
const http = require("http");

// 创建 HTTP 服务器并监听 8000 端口的所有请求
http.createServer((request, response) => {

   // 用 HTTP 状态码和内容类型来设定 HTTP 响应头
   response.writeHead(200, {'Content-Type': 'text/plain'});
   
   // 发送响应体 "Hello World"
   response.end('Hello World\n');
}).listen(8000);

// 在控制台打印访问服务器的 URL
console.log('服务器运行于 http://127.0.0.1:8000/');

二、web 框架(express)需要解决什么问题

Node 本身并不支持其它常见的 web 开发任务。如果需要进行一些具体的处理,比如运行其它 HTTP 动词(比如 GET、POST、DELETE 等)、分别处理不同 URL 路径的请求(“路由”)、托管静态文件,或用模板来动态创建响应,那么可能就要自己编写代码了,亦或使用 web 框架,以避免重新发明轮子。

三、express 能干什么

  • 为不同 URL 路径中使用不同 HTTP (get、·post等)动词的请求(路由)编写处理程序。
  • 集成了“视图”渲染引擎,以便通过将数据插入模板来生成响应。
  • 设置常见 web 应用设置,比如用于连接的端口,以及渲染响应模板的位置。
  • 在请求处理管道的任何位置添加额外的请求处理“中间件”。

四、express的使用

express helloworld

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

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('示例应用正在监听 3000 端口!');
});
  1. require引入Express生成app对象
  2. app.get() 监听指定路径(’/’)下的HTTP GET请求,接到请求后使用回调进行处理,此回调函数以一个请求和一个响应对象作为参数。通过res将制定的内容通过send()方法发送到客户端
  3. 最后一个代码块在 “3000” 端口上启动服务器,并在控制台打印日志。

4.1 创建路由处理器(Route handler)

简单路由

app.get(’/’,callBack)监听’/'下的get动词, app.all()可以监听http所有动词
动词的统计
checkout(), copy(), delete(), get(), head(), lock(), merge(), mkactivity(), mkcol(), move(), m-search(), notify(), options(), patch(), post(), purge(), put(), report(), search(), subscribe(), trace(), unlock(), unsubscribe().

路由的响应

接获路由的请求之后,除了send有许多其它响应方法 可以结束请求/响应周期

res下表中响应对象()的方法可以向客户端发送响应,并终止请求 - 响应周期。如果没有从路由处理程序调用这些方法,则客户端请求将保持挂起状态。

方法描述
res.download()提示下载文件。
重发()结束响应过程。
res.json()发送JSON响应。
res.jsonp()使用JSONP支持发送JSON响应。
res.redirect()重定向请求。
res.render()渲染视图模板。
res.send()发送各种类型的回复。
res.sendFile()将文件作为八位字节流发送。
res.sendStatus()设置响应状态代码并将其字符串表示形式作为响应主体发送。

express.Router实现多级路由

可以为站点的特定部分提供一组路由处理器(使用公共路由前缀进行组合)。(比如对于一个有 维基(Wiki)内容的站点,可以把所有 Wiki 相关的路由放在同一个文件里,使用路由前缀 ‘/wiki/’ 访问它们)。在 Express 中可以使用 express.Router 对象实现。例如,可以把所有维基相关的路由都放在一个 wiki.js 模块中,然后导出 Router 对象,如下:

定义一组路由
// wiki.js - 维基路由模块

const express = require('express');
const router = express.Router();

// 首页路由
router.get('/', (req, res) => {
  res.send('维基首页');
});

// “关于”页面路由
router.get('/about', (req, res) => {
  res.send('关于此维基');
});

module.exports = router;
使用路由
const wiki = require('./wiki.js');
// ...
app.use('/wiki', wiki);
路由参数

路径参数是命名的 URL 段,用于捕获在 URL 中的位置指定的值。命名段以冒号为前缀,然后是名称(例如 /:your_parameter_name/。捕获的值保存在 req.params 对象中,键即参数名(例如 req.params.your_parameter_name

http://localhost:3000/users/34/books/8989,可以这样提取信息(使用 userIdbookId 路径参数):

app.get('/users/:userId/books/:bookId', (req, res) => {
  // 通过 req.params.userId 访问 userId
  // 通过 req.params.bookId 访问 bookId
  res.send(req.params);
});
重定向
res.redirect('/catalog');

4.2 使用中间件(Middleware)

中间件函数通常是对请求或响应执行某些操作,然后调用“栈”里的下一个函数,中间件可以更改请求和响应对象,也可以结束“请求 - 响应”周期。如果它没有结束循环,则必须调用 next() 将控制传递给下一个中间件函数

中间件其实就是一个function 接收 请求和返回报文 以及next函数 三个参数。
在这里插入图片描述

一般使用方式

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

// 示例中间件函数
const a_middleware_function = (req, res, next) => {
  // ... 进行一些操作
  next(); // 调用 next() ,Express 将调用处理链中下一个中间件函数。
};

// 用 use() 为所有的路由和动词添加该函数
app.use(a_middleware_function);

// 用 use() 为一个特定的路由添加该函数
app.use('/someroute', a_middleware_function);

// 为一个特定的 HTTP 动词和路由添加该函数
app.get('/', a_middleware_function);

app.listen(3000);

引用第三方库的使用方式

const express = require('express');
const logger = require('morgan');
const app = express();
app.use(logger('dev'));

4.3 托管静态文件

可以使用 express.static 中间件来托管静态文件,包括图片、CSS 以及 JavaScript 文件(其实 static() 是 Express 提供的原生中间件函数之一)

app.use(express.static('public'));
虚拟前缀

app.use(’/media’, express.static(‘public’));

给public 换个地址,现在可以通过 ‘/media’ 路径前缀来访问 ‘public’ 文件夹中的文件。

http://localhost:3000/media/images/dog.jpg
http://localhost:3000/media/video/cat.mp4
http://localhost:3000/media/cry.mp3

4.4 错误处理

用来处理错误的特殊中间件函数有四个参数(err, req, res, next),而不是之前的三个。例如:

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('出错了!');
});

4.5 使用数据库

支持的数据库

  • Cassandra
  • Couchbase
  • CouchDB
  • LevelDB
  • MySQL
  • MongoDB
  • Neo4j
  • Oracle
  • PostgreSQL
  • Redis
  • SQL Server
  • SQLite
  • ElasticSearch

具体使用方式数据库使用

4.6 渲染数据(视图,view)

模板引擎可为输出文档的结构指定一个模板,在数据处先放置占位符,并于页面生成时填充。模板通常用于生成 HTML,也可以生成其它类型的文档。Express 支持 多个版本的模板引擎,可以参阅:JavaScript 模板引擎对比评测:Jade、Mustache、Dust与其它。

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

// 设置包含模板的文件夹('views')
app.set('views', path.join(__dirname, 'views'));

// 设置视图引擎,比如'some_template_engine_name'
app.set('view engine', 'some_template_engine_name');

五、Express 应用生成器

安装express-generator

$ npm install express-generator -g

创建

$ express helloworld

安装类库

$ npm install

启动

npm start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值