本篇文章给大家推荐一些你可能不知道的,小众却有用的 Node.js 包。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
|
本篇文章给大家推荐一些你可能不知道的,小众却有用的 Node.js 包。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
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));把上面的代码保存为 Usage: index.js -x [num] -y [num] Options: -x [required] -y [required] Missing required argument: y yargs 能够提示我们命令行中到底缺少什么参数,而我们只需要简单的调用 toobusy这是一个非常实用的包。 它轮询 Node 事件循环并跟踪完成请求所需的时间,如果发现延迟时间太长,则 这种处理是很重要的,因为服务器越忙,请求所等待的时间也就越长。这很快就成为一个很复杂的问题,随着时间的流逝会越来越严重。如果你听之任之的话,那么服务将会崩溃。如果我们能及时的停止一些请求的处理,并返回 HTTP 503,这样的话至少还能处理一些请求。 可以轻松的用 npm 命令安装 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 支持的样式列表: 修饰符
颜色
背景颜色
虽然官方只支持这些颜色,但是任何符合 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 和堆分析、网络客户端请求检查以及实时编辑运行代码的功能。
不过 Node Inspector 只与 Chrome 和 Opera 兼容,因为它使用了Blink Developer Tools,并与Node兼容。 一直以来我非常依赖控制台输出进行调试,这会花费了大量的时间。使用 GUI 能够大大的节省调试时间。 terminal-kit如果你的 Node 程序需要在命令行下支持除简单的文本输入输出之外的其他操作,那么你应该需要 terminal-kit。 terminal-kit 简化了与用户交互的许多东西,使你可以专注于在程序中开发重要的内容。terminal-kit 的主要功能是:
有很多适合终端工具包的例子。例如,如果你需要从网上下载一些内容,那么就需要向用户显示进度条。下面的代码用来显示虚拟进度条: 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('\n');
process.exit();
}, 250);
}
else {
setTimeout(updateProgress, 100 + Math.random() * 500);
}
}
progressBar = terminal.progressBar({
width: 80,
title: 'Downloading file:',
eta: true,
percent: true
});
updateProgress();上面的代码会产生下面这种效果:
validator
以下是一些常用的验证器:
下面是常用的检测器:
formidableformidable 可以帮你处理文件上传的每个步骤,包括 multi-part 解析器、把文件写入磁盘以及错误处理等。这是我最喜欢的一个包,如果你不想重新发明轮子可以试一试。 下面是一个在普通 HTTP 服务器上使用 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(
'<form action="/post" method="post">' +
'<input type="text" name="title"><br>' +
'<input type="text" name="data[foo][]"><br>' +
'<input type="submit" value="Submit">' +
'</form>'
);
} 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:\n\n' + 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:\n\n ' + 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
可以用命令执行类似操作: require('shelljs/global');
ls('*.js').forEach(function(file) {
sed('-i', 'BUILD_VERSION', 'v2.0.3', file);
sed('-i', /.*REMOVE_THIS_LINE.*\n/, '', file);
sed('-i', /.*REPLACE_THIS_LINE.*\n/, 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);
}你还知道有哪些好用的包?请在评论留言。
更多编程相关知识,请访问:编程入门!! 以上就是一些你可能不知道却有用的 Node.js 包的详细内容,更多请关注模板之家(www.mb5.com.cn)其它相关文章! |
