Node.js 开发实战
杨浩
腾讯高级工程师
37442 人已学习
新⼈⾸单¥68
课程目录
已完结/共 57 讲
第一章:课程简介 (5讲)
Node.js 开发实战
登录|注册
留言
9
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 20 | HTTP:实现网页版石头剪刀布
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | Node.js是什么?
04 | Node.js可以用来做什么?
05 | 课程实战项目介绍
06 | 什么是技术预研?
07 | Node.js开发环境安装
08 | 第一个Node.js程序:石头剪刀布游戏
09 | 模块:CommonJS规范
10 | 模块:使用模块规范改造石头剪刀布游戏
11 | 模块:npm
12 | 模块:Node.js内置模块
13 | 异步:非阻塞I/O
14 | 异步:异步编程之callback
15 | 异步:事件循环
16 | 异步:异步编程之Promise
17 | 异步:异步编程之async/await
18 | HTTP:什么是HTTP服务器?
19 | HTTP:简单实现一个HTTP服务器
20 | HTTP:实现网页版石头剪刀布
21 | HTTP:用express优化石头剪刀布游戏
22 | HTTP:用koa优化石头剪刀布游戏
23 | RPC 调用:什么是RPC调用?
24 | RPC调用:Node.js Buffer编解码二进制数据包
25 | RPC 调用:Node.js net建立多路复用的RPC通道
26 | 项目启动:整体需求分析
27 | 项目启动:极客时间App下载页开发
28 | 课程详情页:极客时间详情页需求解构
29 | 课程详情页:将ES6模版字符串改造成模板引擎
30 | 课程详情页:极客时间详情页需求实现
31 | 课程播放页:极客时间播放页需求解构
32 | 课程播放页:GraphQL API服务
33 | 课程播放页:极客时间播放页需求实现
34 | 课程列表页:极客时间列表页需求解构
35 | 课程列表页:用 Vue/React 进行服务端渲染
36 | 课程列表页:极客时间列表页需求实现
37 | 性能工具:HTTP服务的性能测试
38 | 性能工具:Node.js性能分析工具
39 | 代码优化:JavaScript代码性能优化
40 | 代码优化:内存管理优化
41 | 代码优化:Node.js C++插件
42 | 多进程优化:Node.js子进程与线程
43 | 多进程优化:Node.js cluster模块实战与源码解读
44 | 多进程优化:进程守护与管理
45 | 架构优化:动静分离
46 | 架构优化:反向代理与缓存服务
47 | 概念:框架设计和工程化
48 | 概念:设计模式
49 | 概念:Serverless
50 | 服务端框架搭建:koaless
51 | 服务端框架搭建:屏蔽请求细节
52 | 服务端框架搭建:完成服务端框架
53 | 云函数式工程实现:服务端代码
54 | 云函数式工程实现:工具端代码
55 | 加餐:调试 Node.js 源码
56 | 结课测试&结束语
57 | 彩蛋:这是一个严肃的课程
本节摘要
登录 后留言

全部留言(9)

  • 最新
  • 精选
沉默的话唠
连续赢三次或者作弊之后,后面再想玩就玩不了。真的不再和我玩了,想玩的话,就得重启Index.js了~ 其他人想去玩的话怎么办呢~

作者回复: 这个问题很棒。 这里就涉及到http的会话管理也就是session,为每一个用户开辟一个游戏会话,并且把游戏数据存在这个会话里。 要做这个东西,首先要确定一个标记用户的方式。一般是在cookie里种一个值,或者是直接使用登陆态。然后要为每一个用户标志符开辟一段存储空间,这个空间你可以直接在代码里用对象字面量声明。不过一般线上的分布式环境要使用redis之类的存储服务在另一个集群做。 足够单独再说挺多了。但是一般只是做BFF层的话不需要用到这块,所以后面能不能开课说到,就看缘分了。

2019-10-18
3
13
昵称
const urlObj = url.parse(req.url, true); //这里设置第二个参数为true就能直接解析query了,不用require('querystring') const query = urlObj.query;

作者回复: 很棒,这个参数我还真不知道。大部分情况都用koa转出来的了

2019-10-21
8
mickey
代码有两个问题: 1. 只能在Chrome中运行,QQ等浏览器有不支持的js语法; 2.如果机器“我再也不和你玩了!”后,需要重启应用才能继续玩。 针对第二个问题,修改代码如下: 1. index.html,增加“重来按钮” <button id="again" style="height: 40px; width: 80px">重来</button> const $button = { ....... again: document.getElementById('again') } 2. game.js,增加按钮组件ID if (['rock', 'scissor', 'paper', 'again'].indexOf(playerAction) == -1) { ...... } 3. index.js,增加业务逻辑判断 http .createServer(function (request, response) { ...... if (parsedUrl.pathname == '/game') { // 如果请求url是游戏请求,比如 http://localhost:3000/game?action=rock的情况 // 就要把action解析出来,然后执行游戏逻辑 const query = querystring.parse(parsedUrl.query); const playerAction = query.action; if (playerAction == 'again'){ playerWon = 0; playerLastAction = null; sameCount = 0; response.writeHead(500); response.end('重来吧!'); return } ...... } }

作者回复: 很棒!我也是备课时间太紧了,对于前端体验就没有考虑的这么周全,感谢指正。

2020-02-08
5
KaKa
node . 什么意思? node ./index.js 我知道, 前者是后者的简写吗

作者回复: https://docs.npmjs.com/about-packages-and-modules 可以参见此处的require规则。 node命令相当于require指定路径运行。 node . 就相当于require了当前文件夹。

2019-11-07
4
123
页面启动的是3000端口,服务器启动的也是3000端口。我这边显示不能共同运行。该怎么办。视频中看您用的都是一个源下的

作者回复: 你是不是把上一节的服务器一起启动了?这两节是单独的,上一节那个服务器可以关掉了。

2021-06-30
1
Geek_216fd5
语句“const parsedUrl = url.parse(request.url);”里,parse() 方法已弃用,可以用如下语句代替 const parsedUrl = new URL(`${req.url}`,'http://localhost:5000/');

作者回复: 不错,最新版本确实这么变动了。

2021-07-09
丫头
感觉要对node有哪些内置模块,以及各内置模块对应的功能内心要有个谱才能愉快玩耍吖…🤔

作者回复: 时间有限不敢讲太啰嗦,官方文档挺齐全了,可以自己去试试

2019-10-17
千虑必有一得
如此巧妙的 html 写法~~
2020-03-29
Mryi
为什么都用==,用严格等是不是更好?
2020-01-06
收起评论