一些你可能不知道却有用的 Node.js 包

本篇文章给大家推荐一些你可能不知道的,小众却有用的 node.js 包。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

一些你可能不知道却有用的 Node.js 包

视频教程推荐:nodejs 教程

yargs

yargs 是一个用来处理命令行参数的包,可以帮你处理自行设置的命令行标志和输入的任何类型的数据,其中包括布尔值、浮点数和字符串等。这个包非常简单明了,不需要在项目中编写大量的样板代码。

yargs 能够帮你处理 “用法帮助” 输出,可以轻松地告诉用户在使用你程序时需要输入哪些选项,包括哪些是必选的。

var argv = require('yargs')    .usage('Usage: $0 -x [num] -y [num]')    .demand(['x','y'])    .argv; console.log('Pow(x, y):', Math.pow(argv.x, argv.y));

登录后复制

把上面的代码保存为 index.js,然后在命令行中执行 node index.js -x 3,会看到如下消息:

Usage: index.js -x [num] -y [num]Options:  -x                                                                  [required]  -y                                                                  [required]Missing required argument: y

登录后复制

yargs 能够提示我们命令行中到底缺少什么参数,而我们只需要简单的调用  .usage() 和 .demand() 方法就行了。

toobusy

这是一个非常实用的包。

它轮询 Node 事件循环并跟踪完成请求所需的时间,如果发现延迟时间太长,则 toobusy 会通知你,然后你就可以将 HTTP 503 “Service Unavailable” 状态码返回给客户端。

这种处理是很重要的,因为服务器越忙,请求所等待的时间也就越长。这很快就成为一个很复杂的问题,随着时间的流逝会越来越严重。如果你听之任之的话,那么服务将会崩溃。如果我们能及时的停止一些请求的处理,并返回 HTTP 503,这样的话至少还能处理一些请求。

可以轻松的用 npm 命令安装 toobusy:

npm install toobusy

登录后复制

然后把它和类似 Express 的东西集成在一起:

var toobusy = require('toobusy'),    express = require('express');    var app = express();    // 如果服务器压力过大将会阻止请求app.use(function(req, res, next) {    if (toobusy()) {        res.send(503, "Too many users!");    } else {        next();    } });  var server = app.listen(3000);  process.on('SIGINT', function() {    server.close();    toobusy.shutdown();    // 正常退出    process.exit();});

登录后复制

不需要写多少代码,也不用太多的配置就能继承到我们自己的项目中。

chalk

在命令行上很难开发出一个好用的用户界面,因为用于和用户交互的只是命令行窗口。那么你该如何去提示一些重要的信息呢?在输出的文本中添加格式不失为一种好方法。Express 就是一个很典型的例子,从它的输出中,你可以很轻松地快读找到重要的信息。

以下是 chalk 支持的样式列表:

修饰符

boldunderlinedimresethiddeninverseitalic (并非所有环境都支持)strikethrough (任何环境下都不支持)

颜色

redblackgreenwhiteyellowblue (在 Windows 上会使用较亮的版本,因为普通的蓝色很难辨认)cyangraymagenta

背景颜色

bgBluebgBlackbgRedbgGreenbgCyanbgYellowbgWhitebgMagenta

虽然官方只支持这些颜色,但是任何符合 xterm 标准的终端都可以使用完整的 8 位色代码。

只需要将字符串传给用于着色或格式化的函数就能轻松的格式化这些文本。如果你需要让用户注意到严重错误提示,可以用下面的格式:

var chalk = require('chalk');var str = chalk.red.bold('ERROR: ') + chalk.bold('Everything just blew up...');console.log(str);

登录后复制

node-inspector

好用的调试器很难找,尤其是那些带有好用的 GUI 的调试器,node-inspector 为你提供了一个网页 GUI 来帮助调试代码。它有标准调试器的所有功能,例如断点、单步执行、退出代码以及变量检查等,另外还有一些不太常用的功能,但是这些功能非常有用,例如 CPU 和堆分析、网络客户端请求检查以及实时编辑运行代码的功能。

1.png

不过 Node Inspector 只与 Chrome 和 Opera 兼容,因为它使用了Blink Developer Tools,并与Node兼容。

一直以来我非常依赖控制台输出进行调试,这会花费了大量的时间。使用 GUI 能够大大的节省调试时间。

terminal-kit

如果你的 Node 程序需要在命令行下支持除简单的文本输入输出之外的其他操作,那么你应该需要 terminal-kit。 terminal-kit 简化了与用户交互的许多东西,使你可以专注于在程序中开发重要的内容。terminal-kit 的主要功能是:

文字样式(很像 chalk)编辑屏幕进度条用户输入

有很多适合终端工具包的例子。例如,如果你需要从网上下载一些内容,那么就需要向用户显示进度条。下面的代码用来显示虚拟进度条:

var terminal = require( 'terminal-kit' ).terminal;var progressBar;var progress = 0;function updateProgress() {    // 产生一个随机的进度值    progress += Math.random() / 10;    progressBar.update(progress);        // 检查是否完成    if (progress >= 1) {        setTimeout(function() {            terminal('');            process.exit();        }, 250);    }    else {        setTimeout(updateProgress, 100 + Math.random() * 500);    }}progressBar = terminal.progressBar({    width: 80,    title: 'Downloading file:',    eta: true,    percent: true});updateProgress();

登录后复制

上面的代码会产生下面这种效果:

2.png

validator

validator 可以帮你进行一系列常见的字符串验证(例如:电子邮件地址、电话号码、IP地址等)。每当你从用户那里获得输入时,这样的软件包都是必不可少的。用户会犯错误,并会在文本框中输入一些非常奇怪的东西,所以需要一个验证输入的包,避免数据损坏或服务器崩溃。

以下是一些常用的验证器:

isEmail(str [, options])isIP(str [, version])isMobilePhone(str, locale)isURL(str [, options])

validator 也提供检测器,可以对输入字符串进行规范化、删除或转义。例如对用户提交的内容进行清理,避免他们输入恶意的 HTML 或 JavaScript 代码。

下面是常用的检测器:

blacklist(input, chars)escape(input)normalizeEmail(email [, options])whitelist(input, chars)

normalizeEmail() 方法它能够确保电子邮件地址都是小写字母,甚至可以删除需要忽略的字符。假设你有电子邮件 abc.def+ghi@163.com,normalizeEmail() 会将其标准化为 abcdefghi@163.com。

formidable

formidable 可以帮你处理文件上传的每个步骤,包括 multi-part 解析器、把文件写入磁盘以及错误处理等。这是我最喜欢的一个包,如果你不想重新发明轮子可以试一试。

下面是一个在普通 HTTP 服务器上使用 formidable 的例子,代码是从包本身中给出的示例修改而来的:

var http = require('http');var util = require('util');var formidable = require('formidable');var path = require('path');var PORT = 8080;var root = path.join(__dirname, '../');exports.dir = {    root    : root,    lib     : root + '/lib',    fixture : root + '/test/fixture',    tmp     : root + '/test/tmp',};var server = http.createServer(function(req, res) {  if (req.url == '/') {    res.writeHead(200, {'content-type': 'text/html'});    res.end(      '' +      '
' + '
' + '' + '' ); } else if (req.url == '/post') { var form = new formidable.IncomingForm(), fields = []; form .on('error', function(err) { res.writeHead(200, {'content-type': 'text/plain'}); res.end('error:' + util.inspect(err)); }) .on('field', function(field, value) { console.log(field, value); fields.push([field, value]); }) .on('end', function() { console.log('-> post done'); res.writeHead(200, {'content-type': 'text/plain'}); res.end('received fields: ' + util.inspect(fields)); }); form.parse(req); } else { res.writeHead(404, {'content-type': 'text/plain'}); res.end('404'); }});server.listen(PORT);console.log('listening on http://localhost:' + PORT + '/');

登录后复制

shelljs

shelljs是一个能够让你在任何系统上使用通用的Unix命令的包,不管是 Windows、Linux 还是 Mac。这样你就不用再为项目分别编写 bash 和批处理脚本。 shelljs 提供了类似 Unix 的环境,如果你需要编写脚本来运行测试、提交代码或在服务器上启动,则只需编写一次即可。

可以用命令执行类似操作:

require('shelljs/global');ls('*.js').forEach(function(file) {    sed('-i', 'BUILD_VERSION', 'v2.0.3', file);    sed('-i', /.*REMOVE_THIS_LINE.*/, '', file);    sed('-i', /.*REPLACE_THIS_LINE.*/, cat('macro.js'), file);});

登录后复制

执行常见命令:

require('shelljs/global');mkdir('-p', 'release/data');cp('-R', 'data/*', 'release/data');

登录后复制

检查可用的二进制文件:

require('shelljs/global');if (!which('git')) {    echo('This script requires git!');    exit(1);}

登录后复制

甚至可以像在 bash 脚本中一样运行命令:

if (exec('git commit -am "Release commit"').code !== 0) {  echo('Error: Git commit failed!');  exit(1);}

登录后复制

你还知道有哪些好用的包?请在评论留言。

原文:https://stackabuse.com/useful-node-packages-you-might-not-know-about/

作者:Scott Robinson

更多编程相关知识,请访问:编程入门!!

以上就是一些你可能不知道却有用的 Node.js 包的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2725067.html

(0)
上一篇 2025年3月7日 23:19:53
下一篇 2025年2月27日 20:08:54

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 避免Node.js模块日志污染程序日志的方法介绍

    视频教程推荐:nodejs 教程 你是否有过这样的经历,当把 logging 添加到自定义 Node 模块中,并认为自己将会从这些额外信息中受益,却发现当你将模块添加为依赖项并运行 npm install 和 npm start 时,你的程…

    2025年3月7日 编程技术
    200
  • 3个值得收藏的实用nodejs软件包

    视频教程推荐:nodejs 教程 Node.js已成为IT不可或缺的一部分。有了自己的软件包管理器NPM,Node可以发现许多非常有用的库和框架。 在本文中,我将向您展示一些使用Node.js构建复杂动态应用程序的可能性。 1、Chalk:…

    2025年3月7日 编程技术
    200
  • 深入浅析JavaScript中的快速排序

    介绍 排序是指以特定顺序(数字或字母)排列线性表的元素。排序通常与搜索一起配合使用。 有许多排序算法,而迄今为止最快的算法之一是快速排序(Quicksort)。 快速排序用分治策略对给定的列表元素进行排序。这意味着算法将问题分解为子问题,直…

    2025年3月7日
    200
  • 如何编写自己的虚拟DOM?方法介绍

    要构建自己的虚拟DOM,需要知道两件事。你甚至不需要深入 React 的源代码或者深入任何其他虚拟DOM实现的源代码,因为它们是如此庞大和复杂——但实际上,虚拟DOM的主要部分只需不到50行代码。 有两个概念: Virtual DOM 是真…

    2025年3月7日 编程技术
    200
  • 了解Node中的模板引擎(入门指南)

    推荐教程:node js教程 在本文中,我们将介绍如何用Node.js和Express来使用 Handlebars 模板引擎。还会介绍什么是模板引擎,以及如何使用把 Handlebars 建服务器端渲染(SSR) web应用程序。 我们还将…

    2025年3月7日 编程技术
    200
  • 避免在JS脚本中过多使用 if 语句,6种代替 if 的方法介绍

    推荐教程:《JavaScript视频教程》 最近在重构代码时,我发现早期的代码使用太多的 if 语句,其程度是我从未见过的。这就是为什么我认为分享这些简单的技巧是非常重要的,这些技巧可以帮助我们避免过多的使用 if 语句。 接下来会介绍6种…

    2025年3月7日
    200
  • 怎样用 TensorFlow.js 创建基本的 AI 模型?

    在本文中我们来研究怎样用 TensorFlow.js 创建基本的 AI 模型,并使用更复杂的模型实现一些有趣的功能。我只是刚刚开始接触人工智能,尽管不需要深入的人工智能知识,但还是需要搞清楚一些概念才行。 什么是模型? 真实世界是很复杂的,…

    2025年3月7日 编程技术
    200
  • 8个编写优秀JS代码的技巧和窍门(分享)

    下面js教程栏目给大家介绍8个编写javascript代码的技巧和窍门。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 推荐教程:《JavaScript视频教程》 1. 生成指定区间内的数字 有时候需要创建在某个数字范围内…

    2025年3月7日
    200
  • node.js中怎么进行调试?

    相关推荐:《nodejs 教程》 用了几天node.js感觉很新奇,但是调试问题实在是愁煞人,开始的时候懒的学习调试方法,看看异常内容就可以了,但随着代码复杂程度的上升,并不是所有错误都是语法错误了,不调试搞不定了,只好搜搜资料,学习了一下…

    2025年3月7日 编程技术
    200
  • 浅析NodeJS中的Buffer

    相关推荐:《node js教程》 当年是看了朴灵的九浅一深 NodeJS 入门的 Node, 朴大大的书讲实践很少更多的篇幅用在了讲原理上,道理听了那么多,后来开始在前端工程领域使用 NodeJS 却处处掣肘,总结原因发现 NodeJS 中…

    2025年3月7日
    200

发表回复

登录后才能评论