使用node的服务器请求初解

简介: 前几天写了一个翻译小工具,使用了node.js的http服务器请求,在这里记录一下使用的步骤和注意事项

本章知识点

1.百度翻译平台接口

2.md5加密转换

3.http.request请求

4.typescript转JavaScript并发送的npm


百度翻译平台


首先在 百度翻译平台注册,申请一个通用翻译的api,标准版的就够用

然后根据文档与支持里的通用翻译文档进行查看和操作


微信图片_20230107124352.png

在操作过程中,app ID和密钥都需要保密,如果泄漏有可能别人也会调用,调用的多的话就会扣钱

拼接完整请求:
http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&
salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4
请求参数:
     q=apple
     from=en
     to=zh
     appid=2015063000000001(请替换为您的appid)
     salt=1435660288(随机码)
     平台分配的密钥: 12345678
生成签名sign:
Step1. 拼接字符串1:
拼接appid=2015063000000001+q=apple+salt=1435660288+密钥=12345678得到字符串1:“2015063000000001apple143566028812345678”
Step2. 计算签名:(对字符串1做md5加密)
sign=md5(2015063000000001apple143566028812345678),得到sign=f89f9594663708c1605f3d736d01d2d4

代码会上传的github或其他开源网站,所以这个时候就要使用md5进行加密了


md5加密


MD5在线加密转化网站

百度翻译的请求链接中的请求参数需要用到md5加密转化使用的是32位小写


项目中使用md5


在项目中如果要使用md5需要下载md5库

yarn add md5

因为我使用的是typescript;所以MD5也要搭配typescript使用

yarn add --dev @types/md5

在项目中引入md5

然后直接使用,转化为md5加密

const sign = md5(要加密的内容) ;


http.request请求的使用方式


node.js中http.request的使用文档

url地址的请求参数是 ?后面的http://api.fanyi.baidu.com/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4它并不是固定不变的,当请求的内容不一样时,里面的参数会变化;

所以需要把它拼装在一起 这个时候可以使用querystring.stringify(),它是将参数变成由  & 相连的字符串  q=hi&sign=1234

querystring.stringify({q: 'hi', sign: '1234'})
// q=hi&sign=1234

https.request需要有两个参数,一个是options参数,另一个是回调函数;

options会自动拼接成url,回调函数是请求后对返回数据的操作

response.on是对数据的监控; req.end() 来表示请求的结束

const options = {
        hostname: 'api.fanyi.baidu.com',
        port: 443,
        path: '/api/trans/vip/translate?'+query,
        method: 'GET'
    };
    const req = https.request(options, (response) => {
        response.on('data', (d) => {
        });
    });
    req.on('error', (e) => {
        console.error(e);
    });
    req.end();

请求返回来的数据都是Buffer类型的,有时候一次性传不完,还会接着几次传递,所以要拼接数据

完整的代码:

const request = https.request(options, (response) => {
        // console.log('状态码:', response.statusCode);
        // console.log('请求头:', response.headers);
        //监听请求到的结果,并把它变成字符串
        let chunks:Buffer[] = [];
        response.on('data', (chunk:Buffer) => {
            chunks.push(chunk)
        });
        response.on('end',()=>{
            const string = Buffer.concat(chunks).toString();
            //定义一个返回结果的类型
            type BaiduResult={
                error_code?:string;
                error_msg?:string;
                from:string;
                to:string;
                trans_result:{src:string,dst:string}[];
            }
            const object:BaiduResult = JSON.parse(string);
            if(object.error_code){
                console.log(errorMap[object.error_code] || object.error_msg);
                //退出当前任务
                process.exit(2)
            }else {
                console.log(object.trans_result[0].dst)
                //退出当前进程,0表示没有错误
                process.exit(0)
            }
        })
    });
    request.on('error', (e) => {
        console.error(e);
    });
    request.end();
复制代码


上传到npm


上传之前需要将typescript转化为JavaScript,并且生成dist目录,只上传dist目录的文件


初始化


会生成一个配置文件tsconfig.json

tsc --init

将outDir修改"outFile": "dist/",

在cli.ts里第一行添加,告诉程序使用node执行

#!/usr/bin/env node

执行tsc,会生成dist目录,所有的ts文件都会转化为js文件

tsc


修改package.json


{
  "name": "uath-translate",
  "version": "0.0.1",
 "main": "dist/main.js",
  //使用fy代替 "dist/cli.js"使用时只需要执行   fy 单词
  "bin": {
    "fy": "dist/cli.js"
  },
  //只上传dist目录下的js文件
  "files": [
    "dist/**/*.js"
  ],
  "scripts": {
    "start": "ts-node-dev src/main.ts"
  },


开始上传


发送之前要把淘宝源修改为npm的官方源

使用  nrm ls 查看源

如果此时你使用的是淘宝源,切换到npm的官方源

nrm use npm

登录你的npm账户

npm adduser

上传

npm public


下载安装测试


在另一个命令行窗口下载,测试

我的npm包名字是uath-translate

npm i -g uath-translate

微信图片_20230107125259.png


/



目录
相关文章
|
监控 Java 应用服务中间件
低并发编程|如何用720个请求让后端服务器瘫痪
本次故障因应用启动时未有效校验核心依赖模块初始化异常,导致后续请求处理中抛出无法捕获的错误,引发线程阻塞,最终耗尽HSF线程池,服务不可用。排查发现类初始化失败且异常未被正确处理,结合线程无限等待问题,确认为依赖初始化异常与流处理中断所致。修复措施包括加强启动校验、捕获Throwable及设置合理超时。总结指出,系统稳定性需从细节入手,防微杜渐,避免连锁故障。
低并发编程|如何用720个请求让后端服务器瘫痪
|
JavaScript 前端开发 API
Node.js中发起HTTP请求的五种方式
以上五种方式,尽管只是冰山一角,但已经足以让编写Node.js HTTP请求的你,在连接世界的舞台上演奏出华丽的乐章。从原生的 `http`到现代的 `fetch`,每种方式都有独特的风格和表现力,让你的代码随着项目的节奏自由地舞动。
1039 65
|
JSON API 数据安全/隐私保护
使用curl命令在服务器上执行HTTP请求
总的来说,curl是一个非常强大的工具,它可以让你在命令行中发送各种类型的HTTP请求。通过学习和实践,你可以掌握这个工具,使你的工作更加高效。
1379 30
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
1292 17
|
机器学习/深度学习 JavaScript Cloud Native
Node.js作为一种快速、可扩展的服务器端运行时环境
Node.js作为一种快速、可扩展的服务器端运行时环境
353 8
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
3767 11
|
存储 JavaScript 搜索推荐
Node框架的安装和配置方法
安装 Node 框架是进行 Node 开发的第一步,通过正确的安装和配置,可以为后续的开发工作提供良好的基础。在安装过程中,需要仔细阅读相关文档和提示,遇到问题及时解决,以确保安装顺利完成。
1298 155

热门文章

最新文章