概要共6992字,预计今年自学时数20两分钟
图源:Unsplash
虽说的好:天界不能掉薄饼,四海没完全免费的早餐。
JavaScript圈或许冲破了这一讲法,圈友们各豪侠且乐意撷取。
不可否认,JavaScript或是说的精神力量源自于大批需用的开放源码包。那些完全免费的开放源码包推动了JavaScript生态系的飞速发展。他们能完全免费采用那些棒呆的包同时实现他们了不起的程式设计工程项目。
那时,小芯将为他们如是说八个超新颖的Node包,都是完全免费的哦!
1. term-size
term-size NPM包能精确确认终端产品询问处的大小不一。
而立非X310e运转时Process.stdout.columns 不存有(比如在子民主化中或是管线中)。那个组件即使在大部份机械式印表机文档配置文档被链接时也能组织工作。
加装
$ npm install term-size
用法
const termSize = require(term-size);termSize();
//=> {columns: 143, rows: 24}
Term size 有一个简短的API
termSize() — 返回一个 具有 columns属性和 rows属性的 object(对象)
相关
· term-size-cli — 那个组件的CLI
注意:确认该包能在macOS, Linux和 Windows上采用。
2. Node MySQL
Node MySQL是node.js 的一个MySQL驱动程序。用JavaScript编写,不需要编译,并且完全由麻省理工学院授权。
加装
这是一个Node.js组件,可通过 npm 注册表采用 。
加装之前,下载并加装Node.js,需要Node.js 0.6或是更高的版本。
采用npm 加装命令进行加装:
$ npm install mysql
有关以前0.9.x版本的信息,请访问 v0.9 分支。
有时可能要求加装源自Github的最新版本,来检查bugfix是否有效。这种情况下,请执行以下操作:
$ npm install mysqljs/mysql
建立连接
建立数据库连接的推荐方式如下:
var mysql = require(mysql);
var connection = mysql.createConnection({
host : example.org,
user : bob,
password : secret
});connection.connect(function(err) {
if (err) {
console.error(error connecting: +err.stack);
return;
} console.log(connected as id + connection.threadId);
});
示例代码
下面是如何采用该包的示例。
var mysql = require(mysql);
var connection = mysql.createConnection({
host : localhost,
user : me,
password : secret,
database : my_db
});connection.connect();connection.query(SELECT 1 + 1 AS solution, function(error, results, fields) {
if (error) throw error;
console.log(The solution is: ,results[0].solution);
});connection.end();
从那个示例中,能了解:
在连接上调用的每个方法都按顺序排队和执行。采用 end()关闭连接,确保在quit包发送到服务器之前执行完大部份剩余的查询。3. Commander.js
Commander受Ruby的commander库启发,是node.js命令行界面的完整解决方案。
加装
npm install commander
声明程序变量
Commander输出一个全局对象,有助于程序的快速运转。
const program = require(commander);program.version(0.0.1);
对于可能以多种方式采用commander的更大型程序(包括单元测试),最好创建一个本地命令对象来采用。
const commander = require(commander);
const program = new commander.Command();program.version(0.0.1);
命令
能采用.command为顶级命令指定(子)命令。有两种同时实现方法:采用附加在命令上的操作处理程序,或者作为一个独立的可执行文档(稍后将详细描述)。在.command的第一个参数中,指定命令名称和任何命令参数。参数能是<required>或<optional>,最后一个参数也可能是可变参数……
比如
// Command implemented usingaction handler (description is supplied separately to `.command`)
// Returns new command for configuring.
program
.command(clone <source>[destination])
.description(clone a repository into anewly created directory)
.action((source, destination) => {
console.log(clone command called);
});// Command implemented usingseparate executable file (description is second parameter to `.command`)
// Returns top-level command for adding more commands.
program
.command(start <service>,start named service)
.command(stop [service], stop namedservice, or all if no name supplied);
4. Chalk
Chalk是用于终端产品样式的Node包。
Chalk有以下亮点:
· 清晰可读的 API
· 高性能
· 支持嵌套样式
· 支持256/真彩颜色
· 支持自动检测颜色
· 不扩展String.prototype
· 清洁和集中
· 积极维护
· 截至2019年10月1日已被大约46,000个包引用
加装
$ npm install chalk
用法
const chalk = require(chalk);console.log(chalk.blue(Hello world!));
Chalk附带了一个易于采用的组合API,只需在API中链接和嵌套想要的样式。
const chalk = require(chalk);
const log = console.log;// Combine styled and normal strings
log(chalk.blue(Hello) + World + chalk.red(!));// Compose multiple stylesusing the chainable API
log(chalk.blue.bgRed.bold(Hello world!));// Pass in multiple arguments
log(chalk.blue(Hello, World!, Foo, bar, biz, baz));
5. Nodemailer
Nodemailer是Node.js应用程序的一个组件,能像发送电子邮件一样简单。该工程项目开始于2010年,那时还没发送电子邮件的明智选择,现在它是大多数Node.js用户默认的解决方法。
nodemailer
Nodemailer是麻省理工学院授权注册的。
准备开始
npm install nodemailer
Nodemailer演示代码
这是一个完整的示例,用以发送一个有纯文本和HTML主体的电子邮件。
const nodemailer =require(nodemailer);// async..await is not allowed in global scope, must usea wrapper
async function main() {
// Generate test SMTP service accountfrom ethereal.email
// Only needed if you dont have areal mail account for testing
let testAccount = await nodemailer.createTestAccount(); // create reusable transporter object usingthe default SMTP transport
let transporter =nodemailer.createTransport({
host: smtp.ethereal.email,
port: 587,
secure: false, // true for 465,false for other ports
auth: {
user: testAccount.user, //generated ethereal user
pass: testAccount.pass //generated ethereal password
}
}); // send mail with defined transport object
let info = await transporter.sendMail({
from: “Fred Foo ” <[email protected]>, // sender address
to: [email protected],[email protected], // list of receivers
subject: Hello ✔, // Subject line
text: Hello world?, // plaintext body
html: <b>Helloworld?</b> // html body
}); console.log(Message sent: %s, info.messageId);
// Message sent:<[email protected]> // Preview only available when sendingthrough an Ethereal account
console.log(Preview URL: %s,nodemailer.getTestMessageUrl(info));
// Preview URL:https://ethereal.email/message/WaQKMgKddxQDoou…
}main().catch(console.error);
示例
Nodemailer AMQP是一个采用RabbitMQ来管理NodemaiEthereal邮件捕获服务的示例脚本输出如下:
用Nodemailer发送邮件
6. Winston
Winston是一个简单通用的日志库,支持多种传输方式。传输实质上是日志的存储设备。
每个Winston记录器能对不同级别配置不同的传输方式。比如,用户可能希望将错误日志储存有一个永久的远程位置(如数据库),但是大部份日志都会输出到控制台或本地文档。
Github
Winston旨在将部分日志记录民主化解耦,增强其灵活性和扩展性。注意支持日志格式化和级别的灵活性,并确保那些API从运输日志(即如何存储/索引日志)解耦到公开给程序员。
加装
npm i Winston
用法
推荐采用的方式是创建他们的日志记录器。最简单的方法是采用winston.createLogger:
const winston = require(winston);const logger =winston.createLogger({
level: info,
format: winston.format.json(),
defaultMeta: { service: user-service},
transports: [
//
// – Write to all logs with level`info` and below to `combined.log`
// – Write all logs error (and below)to `error.log`.
//
new winston.transports.File({filename: error.log, level: error }),
new winston.transports.File({filename: combined.log })
]
});//
// If were not in production then log to the `console` with the format:
// `${info.level}: ${info.message} JSON.stringify({ …rest }) `
//
if (process.env.NODE_ENV !== production) {
logger.add(newwinston.transports.Console({
format: winston.format.simple()
}));
}
用户也能直接通过require(winston)公开的默认日志记录器进行记录,但这仅仅是一种便于共享的日志记录器,能在整个应用程序中采用。
7. Passport
Passport是Node.js的登陆验证的中间件,可与Express兼容。
Passport的唯一用途是验证请求,能通过名为strategies(策略)的可扩展插件集来同时实现。Passport不挂载路由或承担任何特定的数据库模式,极大地提高了灵活性,并允许开发者做出应用程序级的决策。那个API很简单:提供给Passport一个验证请求,Passport提供hooks来控制验证成功或失败时发生的情况。
加装
$ npm install passport
用法策略
Passport采用策略(strategies)的概念去验证请求。策略包括:通过采用OAuth委托验证或是采用OpenID进行联合身份验证来验证用户名和密码凭据。
在验证请求之前,必须配置应用程序采用的策略。
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username },function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null,false); }
if (!user.verifyPassword(password)){ return done(null, false); }
return done(null, user);
});
}
));
有480多种策略,可在passportjs.org查找。
会话
Passport包将保持持久的登录对话。为了持续会话,必须将已验证身份的用户序列化到会话,并在发出后续请求时反序列化。
Passport对用户记录的存储方式没任何限制。相反,用户能为Passport提供函数,使其同时实现必要的序列化和反序列化逻辑。在典型应用程序中,这和对用户ID序列化后,再反序列化时通过ID查找用户一样简单。
passport.serializeUser(function(user,done) {
done(null, user.id);
});passport.deserializeUser(function(id, done) {
User.findById(id, function (err, user){
done(err, user);
});
});
图源:Unsplash
结论
最后,不要忘记不时去赞助和支持一下包的创建者和维护者哦。
正所谓“赠人玫瑰手留余香”,每位创建者、维护者和撷取者都是天使。
他们一起撷取AI自学与发展的干货
如转载,请后台留言,遵守转载规范