node 与 浏览器的区别
- 没有浏览器提供的 document、window、以及所有其他的对象
- 在浏览器中,不存在 Node.js 通过其模块提供的所有不错的 API,例如文件系统访问功能
- Node.js 使用 CommonJS 模块系统,而在浏览器中,则还正在实现 ES 模块标准。在实践中,这意味着在 Node.js 中使用 require(),而在浏览器中则使用 import
- 由于 JavaScript 发展的速度非常快,但是浏览器发展得慢一些。在 web 上,不得不使用较旧的 JavaScript / ECMAScript 版本。可以使用 Babel 将代码转换为与 ES5 兼容的代码,再交付给浏览器,但是在 Node.js 中,则不需要这样做
安装
Node.js 可以通过多种方式进行安装
mac
brew install node
window
运行脚本
//app.js 运行的文件名,确定要有该文件哦!!!
node app.js
app.js
const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.send('你好')
})
app.listen(3000, () => console.log('服务器已就绪'))
REPL
使用 tab 键自动补全
REPL 酷的是它是交互式的。
在编写代码时,如果按下 tab 键,则 REPL 会尝试自动补全所写的内容,以匹配已定义或预定义的变量。
console 输出
元素计算 console.count
console.count(
'x 的值为 ' + x + ' 且已经检查了几次?'
)
console.count(
'x 的值为 ' + x + ' 且已经检查了几次?'
)
console.count(
'y 的值为 ' + y + ' 且已经检查了几次?'
)
const oranges = ['橙子', '橙子']
const apples = ['苹果']
oranges.forEach(fruit => {
console.count(fruit)
})
apples.forEach(fruit => {
console.count(fruit)
})
计算耗时
const doSomething = () => {
console.log('开始测试')
for(var i=0;i<10;i++){
console.log(i)
}
}
const measureDoingSomething = () => {
console.time('doSomething()')
//做点事,并测量所需的时间。
doSomething()
console.timeEnd('doSomething()')
}
measureDoingSomething()
着色
引入chalk
cnpm i chalk --save-dev
console.log('\x1b[33m%s\x1b[0m', '使用转义序列输出黄色')
const chalk = require('chalk')
console.log(chalk.red('通过chalk输出红色'))
console.log(chalk.bgGreen('chalk.bgGreen带背景'))
进度条
引入progress
cnpm i progress --save-dev
const ProgressBar = require('progress')
const bar = new ProgressBar('downloading[:bar ] :rate/bps :percent :etas', {
total: 10 ,
incomplete:'.',
complete:'=',
callback (){
console.log('进度 加载完成---')
}
})
const timer = setInterval(() => {
bar.tick()
if (bar.complete) {
clearInterval(timer)
}
}, 100)
Tokens
- :bar 进度条本身
- :current 当前刻度号
- :total 总滴答声
- :elapsed 时间(秒)
- :percent 完成率
- :eta 估计完成时间(以秒为单位)
- :rate 每秒滴答率
Options
- curr 当前完成的索引
- total 完成的总滴答数
- width 进度条的显示宽度默认为总计
- stream 默认为stderr的输出流
- head 头字符默认为完整字符
- complete 补全字符,默认为“ =“
- incomplete 不完整的字符,默认为“-”
- renderThrottle 更新之间的最短时间(以毫秒为单位)默认为16
- clear 选项,清除完成时的条,默认为false
- callback 进度条完成时调用的可选函数
从命令行接收输入
readline每次一行地从可读流获取输入
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
})
readline.question(`你叫什么名字?`, name => {
console.log(`你好 ${name}!`)
readline.close()
})
Inquirer.js 软件包则提供了更完整、更抽象的解决方案
const inquirer = require('inquirer')
var questions = [
{
type: 'input',
name: 'name',
message: "你叫什么名字?"
},
{
type: 'input',
name: 'age',
message: "你多大了?"
},
{
type: 'input',
name: 'address',
message: "你住在哪里?"
}
]
inquirer.prompt(questions).then(answers => {
console.log(answers,'aaaa')
console.log(`你好 ${answers['name']}!`)
console.log(`你 ${answers['age']} 岁!`)
console.log(`你住在 ${answers['address']}!`)
})
exports公开文件功能功能
Node.js 具有内置的模块系统。
Node.js 文件可以导入其他 Node.js 文件公开的功能。
目录
├── a.js
├── b.js
└── c.js
module.exports
公开了它指向的对象
//b.js
const car = {
brand: 'Ford',
model: 'Fiesta'
}
module.exports = car
export公开了它指向的对象的属性
const car = {
brand: 'Ford',
model: 'Fiesta'
}
exports.car = car
a.js 引入b、c 文件
const b = require('./b')
const c = require('./c')
/**
* 或
* const car = require('./c').car
*/
console.log(b,'公开b文件的对象')
console.log(c,'公开c文件的对象')
效果