结合命令行工具和 http 模块的 request 模块来做一个翻译工具
在终端输入:fy world
-> 就会输出:世界
alt + 1
、alt + 2
-> 切换到文件目录、切换到终端
fanyi
目录cd fanyi
yarn init -y
0.0.1
src
目录 -> 用来放置源代码
main.ts
scripts
-> 'start': 'ts-node-dev src/main.ts'
commander
-> 手否要手动安装types
声明?
typings
目录,这里边有一个index.d.ts
,也就是说它自带了types
声明 -> 因此我们不需要安装这个额外工具了src/cli.ts
-> 专门用来处理命令行node
开发 -> 安装@types/node
才会有代码提示 -> 这是开发依赖cli.ts
里边使用commander
💡:更改Usage
的输出情况?
// import * as commander from "commander";
// const program = new commander.Command();
import { Command } from "commander";
const program = new Command();
program.version("0.0.1").name("fy").usage("<english>");
// 解析参数,比如自带的 -h,和我们通过 program.version 写的 -V
// 根据解析结果,会在终端打印相应的内容
program.parse(process.argv);
👇:添加功能 -> 获取输入的单词,然后到网上查询这个单词的翻译,再显示到终端
💡:获取用户输入的单词
💡:如何把获取到的单词转化成中文?
申请好后,不要暴露你的 APP ID 和密钥:
文档:百度翻译开放平台
用HTTPS
的
一个请求示例:
我们要关注的输入:
注意,如果你的请求链接被泄漏了,这也不打紧,因为这个链接只能固定请求这个单词
比如这样:
💡:不可知验证
知道请求地址是什么,以及需要什么参数后,我们就得用 Node.js 去发请求了,之前我们接触的 Node.js 响应,现在则是请求
文档:https 安全超文本传输协议 - Node.js API 文档
💡:拿到百度首页的数据
💡:测试百度翻译默认给出的那个接口
➹:nodejs 中的 process.stdout.write
💡:改成自己想要的请求地址,也就是翻译 API 接口
文档:querystring 查询字符串 - Node.js API 文档
测试querystring
:
不需要我们需要
https
这样的协议
💡:Node.js 没有自带的md5
,我们需要自己安装
它不支持 TS,也就是没有那个@types
我们经常会看到有些库说到「该库完美兼容 TS」,我们知道 TS 本来就兼容 JS 的,可加「完美」二字是为啥呢?
比如md5
就没有完美兼容,你看看commander
,它就是完美兼容的,你写啥 API 都会用代码提示
当然,前端社区也提供了有关md5
的types
声明
yarn add @types/md5 -D
使用md5
:
得到是一个 32 位的字符串
💡:密钥和 ID 不能被泄漏
为了不泄漏密钥和 ID,我们创建了一个private.ts
文件 -> 在这个文件里边写这两个数据
💡:用自己的密钥和 APP ID 去测试其它单字的翻译
💡:如何获取response
的消息体?
💡:如何知道对象有什么?
根据响应结果来写type
💡:trans_result
-> 这个trans
不要缩写
因为trans
有女装大佬之意,也就是「跨性别」
不知道这个英文的简写是何意就不要用缩写,比如你写 TypeScript 的缩写ts
,也有女装大佬的意思
💡:错误码处理
为什么需要处理?
错误码中文化处理(本来返回英文的):
当你的项目代码越来越多,你会看到这样的弱智代码:
如何消除这样的弱智代码?
只要
if else
超过 5 个,那么你的代码就一定有问题
类似一机一码这样
还有更复杂的情况,比如{}
里边有多个变量赋值的情况,也可以用表驱动编程
💡:cli.ts
这是 ts 文件,我们需要把它编译成 js 文件,才能交给 node 去执行
全局安装typescript
查看tsc
版本
tsc -V
# Version 4.5.4
创建tsconfig
文件
有了这个文件之后,你会发现原先的main.ts
文件爆红了
确定这个值的类型 -> 用constructor
就好了
tsconfig.json
这个文件很大,我们要改的地方不多
就改这个:"outDir": "dist/"
💡:@types/node
和node
不是完全兼容的
消除 ts 报错:
💡:编译文件
直接在项目根目录敲tsc
即可:
该dist
目录不能上传,因为有密钥
💡:发布前的配置
💡:本地测试情况
yarn link
也可以配置别名(注意路径):
💡:对比其它的,比如fanyi
npm install fanyi -g
➹:afc163/fanyi: A 🇨🇳 and 🇺🇸 translate tool in your command line.
注意:不要说md5
加密,一旦你这么说了,那么你就是外行了!
如果想把这个项目作为面试项目,那么你可以把密钥发布,面试完,再把你账号的你密钥给重置了
用到了三个模块:
import * as https from "https";
import * as querystring from "querystring";
import md5 = require("md5");
querystring.stringify()
:构建查询字符串https.request
:发请求💡:前朝的剑斩本朝的官?
俗语。指用前朝代的法律,去处理现在这个朝代的官员。现代延伸指不同时代的法律有所差异,无法直接适用
💡:import
和 require
混合用
首选 ES Modules,次选 CommonJS
💡:tsc 默认的编译结果都是 CommonJS 规范的
你可以到
tsconfig.json
里边配置module
选项
使用了 TS 去开发 Node 应用后,你可以直接用 import
和 export
去导入导出模块,毕竟你可以直接用ts-node-dev
去运行你的 TS 代码
Node 对 ES Modules 的支持 -> >=9
的 Node 才支持
搜索「node esmodules 开启」: