88. 静态服务器
HTTP 模块 Node.js 全解 HTTP协议 理论上我们应该先学习这个协议再学习http模块 不管了,直接干! 在实践中学习 TypeScript 理论上应该先看一下TS文档 不管了,直接干! 干完了再看文档 一些有用的工具 node-dev 当文件更新时自动重启的node 避免每次改完代码都要重新运行的麻烦 不宜在生产环境使用 ●tS-node 让node支持直接运行TypeScript代码 不宜在生产环境使用 ●ts-node-dev 这个工具结合了.上面两个工具 可以用TypeScript开发Node.js程序,且会自动重启 不宜在生产环境使用,但非常适合用来学习 些有用的工具2 WebStorm自动格式化 Reformat Code设置为 Ctrl+ L或者其他键位 可以快速帮你格式化TS/JS代码 WebStorm自动写代码 Complete Current Statement 设为 Ctrl +Enter Show Context Actions设为Alt+Enter 把冲突的键位改成其他快捷键 当然你可以设为其他键位,这只是我的习惯 VSCode配置 开启自动保存,开启保存时自动格式化(有些人不喜欢) 当然也可以Shift+Alt+F手动格式化 QuickFix默认快捷键Ctrl+句号(功能稍弱) 一些有用的工具3 WebStorm Git配置 把WebStorm的git路径设置为 cmder 里的 示例: D:\Fang\Software\cmder\vendor\git-for- Windows\bin\git.exe 好处是统一管理统一配置 VSCode Git 配置 在 settings.json 里添加 "git.enabled":true, "git.path":"D:\... \git-for-windows\cmd\git.exe", "terminal.integrated.shell.windows":"D:\. .1\git-for-windows\bin\bash.exe", 目的是让 VSCode 使用 cmder 里的 git 和 bash 你如果没装 cmder 就自行修改为其他路径 一些有用的工具3 curl GET请求:curl-vurl POST请求:curl-v-d"name=frank" url 设置请求头:-H'Content-Type: application/json' 设置动词:-XPUT JSON 请求: curl-d '{"name":"bob''} -H Content- Type:application/json' url 后面会用到 curl 来构造请求 yarn global add ts-node-dev 或者npm i-g ts-node-dev 创建项目 步骤 yarn init -y 新建 index.ts 使用命令行或者WebStorm启动 yarn add --dev @types/node安装 node 声明文件 引入http 模块 (WebStorm自动导入) 用 http 创建 server (WebStorm自动命名) 监听 server 的 request事件(可以简写) server.listen(8888)开始监听8888端口 使用 curl-v http://localhost:8888 发请求 server是个什么东西 http. Server类的实例 根据文档知道http.createServer的返回值的类型 所以server是http. Server的实例 因此server拥有几个事件和方法 其中也就request事件和listen()方法目前能用上 继承net, Server类 根据文档知道http. Server继承了net. Server 隐私server有拥有了几个事件和方法 其中也就error事件和address()方法目前能用上 ●这就是看文档的技巧 用 Node.js 获取请求内容 get 请求 request.method 获取请求动词 request.url 获取请求路径 (含查询参数) request.header 获取请求头 get 请求一般没有消息体/请求体 post 请求 curl-v-d "name=frank" http://localhost:8888 request.on('data', fn) 获取消息体 request.on('end', fn)拼接消息体 (request, response)是啥 找类 根据文档,request 是http.IncomingMessage的实例 根据文档,response 是http. ServerResponse的实例 Request 拥有headers、method url等 属性 从stream.Readable类继承了data/end/error 事件 为什么不能直接拿到请求的消息体呢?跟TCP有关 ●Response 拥有getHeader/setHeader/end/write等方法 拥有statusCode属性,可读可写 继承了Stream,目前用不上 根据url返回不同的文件 目标一 处理查询参数 目标2 提示:使用url.parse 匹配任意文件 目标3 处理不存在的文件 目标4 提示:返回一个404页面 处理非GET请求 目标5 提示: 405 Method Not Allowed 添加缓存选项 目标6 提示: Cache-Control 响应内容启用 gzip 目标7,可选 提示:zlib文档 对比业界优秀案例 http-server / node-static 找到不足,超过它们 发布到 npm 不要浪费你的代码,持续维护三个月,可以换WebStorm 发布代码 步骤 首先要把 TypeScript变成 JS 使用tsc命令可以做到 (全局安装 typescript) 然后把 js 作为 package.json 里的 main字段 测试JS是否可用 npm adduser; npm publish (或者用 yarn login) 免费正版JetBrains全家桶 申请条件 你是开源项目的核心贡献者 你的项目是开源的 (如MIT许可证) 你的项目是不盈利的 你的项目至少活跃了3个月 你定期发布更新的版本 满足条件就点击申请按钮吧 填写材料 邮箱地址一定不要填错 No.of required licenses 处填1 项目描述用 Google 翻译就行 正版JetBrains全家桶唾手可得,价值 $649/年 总结 学习方法 先定一个小目标 CRM完事 本节课了解了 http模块 request/response两个对象 url模块 zlib模块 HTTP状态码 TypeScript ! 再见 下节课继续干
最后更新于
这有帮助吗?