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('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
validator 可以帮你进行一系列常见的字符串验证(例如:电子邮件地址、电话号码、IP地址等) 。每当你从用户那里获得输入时,这样的软件包都是必不可少的 。用户会犯错误,并会在文本框中输入一些非常奇怪的东西,所以需要一个验证输入的包,避免数据损坏或服务器崩溃 。
以下是一些常用的验证器:
- isEmail(str [, options])
- isIP(str [, version])
- isMobilePhone(str, locale)
- isURL(str [, options])
下面是常用的检测器:
- blacklist(input, chars)
- escape(input)
- normalizeEmail(email [, options])
- whitelist(input, chars)
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(
'<form action="/post" method="post">' +
'<input type="text" name="title"><br>' +
'<input type="text" name="data[foo][]"><br>' +
'<input type="submit" value=https://www.isolves.com/it/cxkf/yy/js/2020-10-10/"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:nn' + 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:nn ' + util.inspect(fields));
});
form.parse(req);
} else {
res.writeHead(404, {'content-type': 'text/plain'});
res.end('404');
}
推荐阅读
- 面向对象设计与统一建模语言UML
- linux后台开发中避免僵尸进程的方法总结
- 柏翠面包机各款对比 柏翠面包机性价比最高的是哪一款
- 狗狗一开始吃狗粮后来为什么不吃了 狗吃惯了饭不吃狗粮
- 大学什么时候可以不住宿舍 大学宿舍一般几个人住
- 比X大师更靠谱?一款真正良心的硬件检测工具
- excel中怎样把两个单元格的内容合并在一个单元格里?excell怎么把两个单元格内容合并到一个单元格?
- 黑柴犬多少钱一只幼崽 日本黑柴犬多少钱一只
- 一篇文章实现vue集成axios、调用、跨域、配置多个跨域
- 烘干机大小 一般家用烘干机多大就可以够用了