이 글에서는 Node.js의 Express 프레임워크에 대해 자세히 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
많은 언어에는 프로젝트를 더 빠르게 개발하고 유지하는 데 도움이 되는 프레임워크가 있습니다. 예를 들어 JS에는 Vue, React, Angular 등과 같은 인기 있는 프레임워크가 있습니다. Node.js 프로젝트를 개발하는 데 도움이 될 수 있는 일부 프레임워크도 있습니다.
현재 널리 사용되는 Node.js 프레임워크에는 Express
, Koa
및 Egg.js
가 포함됩니다. 미들웨어를 기반으로 구현되며, 미들웨어의 실행 방식은 어니언 모델을 기반으로 해야 합니다. [추천 학습: " nodejs 튜토리얼Express
、Koa
和 Egg.js
,无论是哪个 Node.js 框架,都是基于中间件来实现的,而中间件的执行方式就需要依据洋葱模型。【推荐学习:《nodejs 教程》】
抽象一点解释,就是从洋葱中心点穿过去,就必须先一层层向内穿入洋葱表皮进入中心点,然后再从中心点一层层向外穿出表皮,这里有个特点:进入时穿入了多少层表皮,出去时就必须穿出多少层表皮。先穿入表皮,后穿出表皮,这种结构是符合栈结构先进后出的原则的。
在 Node.js 框架中,洋葱的表皮我们可以定义为中间件:
next()
;下面来简单了解一些 Express 框架吧!
Express
是 Node.js 中 HTTP 服务的一个框架,而要了解一个框架,最好的方法是
那要了解它的关键功能,我们可以去 Express 的网站 查看它的 Features
,这些核心功能都是为了让我们更加方便、简洁地写出 HTTP 服务,从而大大减轻我们的开发负担,让我们快速上手开发。
一些 Features
:
request
/response
属性的简化,让我们不需要经过转换,然后直接使用对应的属性。request
:pathname
、query
等response
:send()
、json()
、jsonp()
等next()
)Express
的洋葱模型现在通过使用 Express 框架来改造石头剪刀布游戏,game.js
游戏模块和 index.html
页面的代码没有变动,可以去 github 上面 clone
。
index.js
Express 改造,需要先用 npm
安装 express
:npm i express
》]
추상적인 설명으로는 양파의 중심점을 통과하려면 먼저 양파껍질을 한 겹씩 중심점까지 침투시킨 후 중심점에서 한 겹씩 들어가야 한다는 것입니다. 표피를 뚫는다는 특징이 있습니다 들어갈 때 표피를 몇 겹 뚫고 나갈 때 표피를 몇 겹 뚫어야 합니다. 이 구조는 스택 구조의 선입후출 원리와 일치합니다. Node.js 프레임워크에서는 어니언 스킨을 미들웨어로 정의할 수 있습니다.
next( )
;몇 가지 Express 프레임워크를 간략하게 살펴보겠습니다! 익스프레스
익스프레스
Node.js의 HTTP 서비스를 위한 프레임워크입니다. 프레임워크를 이해하는 가장 좋은 방법은 프레임워크의 핵심 기능을 이해하는 것입니다.
기능
을 확인하세요. 이러한 핵심 기능은 모두 HTTP를 보다 편리하고 간결하게 작성할 수 있도록 설계되었습니다. 서비스를 통해 개발 부담을 크게 줄이고 빠르게 작업을 수행할 수 있습니다. 개발을 시작합니다. 🎜🎜🎜🎜일부 기능
: 🎜요청
/응답
속성 단순화를 통해 변환 없이 해당 속성을 직접 사용할 수 있습니다. 요청
: 경로 이름
, 쿼리
등응답
:send(), json()
, jsonp()
등 next()
) Express
의 양파 모델을 깨뜨립니다.game.js
게임 모듈의 코드 및 index.html
페이지는 변경되지 않았습니다. github로 이동하실 수 있습니다 🎜 클론
위. 🎜🎜index.js
Express 변환을 사용하려면 먼저 npm
을 사용하여 express
를 설치해야 합니다. npm i express
. 🎜const fs = require('fs'); const express = require('express'); const game = require('./game'); let playerWon = 0; // 赢的次数 const app = express(); // 路由功能,将对应路由功能分开作为模块处理,到时候也可以放到其它文件去 // 通过 app.get 设定 /favicon.ico 路径的路由 // .get 代表请求 method 是 get,所以这里可以用 post、delete 等。这个能力很适合用于创建 rest 服务 app.get('/favicon.ico', function (request, response) { // 一句 status(200) 即可代替 writeHead(200); end(); // response.writeHead(200); // response.end(); response.status(200); return; }) // 打开页面 index.html app.get('/', function (request, response) { // fs.createReadStream(__dirname + '/index.html').pipe(response); // send接口会判断你传入的值的类型,文本的话则会处理为text/html // Buffer的话则会处理为下载,html文件需要加上 `utf-8` response.send(fs.readFileSync(__dirname + '/index.html', 'utf-8')) }) // next()同步状态下没有问题的,但是一旦有了异步,洋葱模型就打破了 app.get('/game', function (request, response, next) { if (playerWon >= 3) { response.status(500); response.send('我不会再玩了!'); return; } // 通过next执行后续中间件 next(); // 当后续中间件执行完之后,会执行到这个位置 if (response.playerWon) { playerWon++; } }, // 获取玩家的操作 function (request, response, next) { // Express 中对 request 做了一些处理,可以直接拿到 query 参数 // const query = querystring.parse(parsedUrl.query); // const playerAction = query.action; const query = request.query; const playerAction = query.action; response.playerAction = playerAction; // 通过next执行后续中间件 next(); }, function (request, response) { // 通过 response 去挂载一些参数 let playerAction = response.playerAction; // 执行游戏逻辑 const gameRes = game(playerAction); // 先返回头部 // response.writeHead(200); response.status(200); // 根据不同的游戏结果返回不同的说明 if (gameRes == 0) { // response.end('平局!'); response.send('平局!'); } else if (gameRes == 1) { response.send('你赢了!'); // 玩家胜利次数统计+1 // playerWon++; response.playerWon = true; } else { response.send('你输了!'); } } ) app.listen(3000);
위 내용은 Node.js의 Express 프레임워크에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!