Node的安装及环境配置
-
什么叫node.js?
-
node.js是一个基于Chrome V8引擎的js运行环境。
-
node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。
-
事件驱动:任务驱动,发布者,订阅者,事件驱动(例如点击事件)。
-
非阻塞: 执行某一个任务的同时也可以执行其他任务
-
阻塞: 执行某一个任务,这个任务如果没有执行完成,其他任务必须等待
-
-
-
npm: Node.js的包管理工具,是全球最大的开源库生态系统.
-
nrm(npm registry manager ): 是npm的镜像源管理工具,有时候国外资源太慢,那么我们可以用这个来切换镜像源。
-
首先全局安装 nrm npm install -g nrm
-
列出可用的源:nrm ls
-
使用哪个源:nrm use taobao
4.nvm: 是一个可以让你在同一台机器上安装和切换不同版本node的工具,nvm 的官方版本只支持Linux 和 Mac。
5.nodemon : 是一款非常实用的工具,用来监控你 node.js 源代码的任何变化和自动重启你的 服务器。安装 命令: npm install -g nodemon。
-
6.node版本常识
-
偶数版本为稳定版 (0.6.x ,0.8.x ,0.10.x)
-
奇数版本为非稳定版(0.7.x ,0.9.x ,0.11.x)
-
LTS(Long Term Support ): 稳定版
-
Current :最新版本的(不建议安装最新版本的)
Windows下常用的命令行操作
-
DOS命令
-
cmd终端唤醒: win键 + R , 输入cmd 回车
-
mkdir 创建目录
-
dir 列出当前目录的列表
-
cls 清空终端命令
-
del 删除某一个文件
-
-
git命令(注意:两种类型的命令中, cd是一个意思)
-
mkdir 创建目录
-
ls 查看当前目录列表
-
clear 清空当前控制台
-
rm -rf 文件名称 删除某一个文件或是目录
-
commonjs规范
-
Node 应用由模块组成,采用 CommonJS 模块规范。
-
CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。
-
内置模块
-
querystring
const qs = require('querystring'); var str = 'http://www.baidu.com/home?a=1&b=2#c=3'; console.log(qs.parse(str));//{ 'http://www.baidu.com/home?a': '1', b: '2#c=3' } //parse : 将字符串转为对象(以&为界分) //stringify: 将对象转为字符串 【 编码 】 // escape 将中文进行编码 // unescape 将中文解码 var obj = { 'http://www.baidu.com/home?a': 1, b: '2#c=3' } console.log(qs.stringify(obj));//http%3A%2F%2Fwww.baidu.com%2Fhome%3Fa=1&b=2%23c%3D3 var str1 = 'bj北京'; console.log(qs.escape(str1));//bj%E5%8C%97%E4%BA%AC var str2 = 'bj%E5%8C%97%E4%BA%AC'; console.log(qs.unescape(str2));//bj北京
-
http
-
http.createServer() 使用node 创建一个服务器
const http = require( 'http' ) const host = 'localhost' const port = 8000 ;//自己随意设置的端口号 http.createServer(( request,response ) => { // response.writeHead( 状态码,请求头 ) response.writeHead( 200, { 'Content-type': 'text/html;charset=utf8' }); response.write('<h3> 这里使用Node创建的一个静态服务器 </h3>') // 往前端发送信息 response.end() // 告诉前端信息已经结束了 }).listen( port,host,() => { console.log( `The server is running at: http://${ host }:${ port }` ) })
-
http.get 进行数据请求
const http = require('http') http.get('http://api.k780.com/?app=weather.city&cou=1&appkey=43880&sign=6a31f4fe1408d69bb0417b046eeae5b6&format=json', (res) => { const { statusCode } = res; // 获取请求状态码 200 301 302 303 304 404... const contentType = res.headers['content-type']; // 获取请求类型数据类型 res.setEncoding('utf8'); // 字符编码 let rawData = ''; res.on('data', (chunk) => { rawData += chunk; }); //通过data事件拼接数据流 res.on('end', () => { // 获取数据结束了 try { // 高级编程语法捕获错误信息 console.log(rawData); } catch (e) { console.error(e.message); } }); });
-
-
-
url
-
const url = require('url'); const urlpath = 'http://api.k780.com/?app=weather.future&weaid=hangzhou&&appkey=43633&sign=3050bb4c62ee490c994d41b450b65ba1&format=json'; //console.log(url.parse(urlpath));//结果是个对象,包含url的所有属性 //console.log(url.parse(urlpath).query);//app=weather.future&weaid=hangzhou&&appkey=43633&sign=3050bb4c62ee490c994d41b450b65ba1&format=json //console.log(url.parse(urlpath).search);//?app=weather.future&weaid=hangzhou&&appkey=43633&sign=3050bb4c62ee490c994d41b450b65ba1&format=json console.log(url.parse(urlpath, true).query); //[Object: null prototype] { // app: 'weather.future', // weaid: 'hangzhou', // appkey: '43633', // sign: '3050bb4c62ee490c994d41b450b65ba1', // format: 'json' } //console.log(url.parse(urlpath, true).query.app);//weather.future
-
-
fs
-
读取文件
/* Node.js读取文件都是二进制流 Buffer binary */ const fs = require('fs') fs.readFile('./yyb.txt', 'utf8', (error, docs) => { console.log(docs.toString())//获取yyb.txt文件的内容 })
-
文件和目录的信息
-
const fs = require('fs'); //得到文件与目录信息: stat fs.stat('url.js', (err, stats) => { if (err) { console.log(err); } else { console.log(stats);//信息 console.log(`文件:${stats.isFile()}`);//是否是文件(true/false) console.log(`目录:${stats.isDirectory()}`);//是否是目录(true/false) } }); // 创建一个目录:mkdir fs.mkdir('file', (err) => { if (err) { console.log(err); } else { console.log('目录创建成功');//信息 } });
-
-
-
第三方模块
//request这个模块是做数据请求 request = require('request'); request('https://m.lagou.com/listmore.json?pageno=1&pagesize=20', function (error, response, body) { console.log('error:', error); console.log('statusCode:', response && response.statusCode);//200 console.log('body:', body);//接口内容 });
-
自定义模块
-
定义模块和暴露模块
var person = { name: 'zhangsan', age: 20, sex: '男' }//定义模块 // module.exports = person;//这种方法只能导出一个 module.exports = {//更安全,还可以批量导出 person }//暴露接口(以上两种方法)
-
引用模块
const { person } = require('./3.moduleexports'); console.log(person.name);
-