什么是node.js
node.js是一个基于Chrome v8引擎的javascript 运行环境。Node.js使用了一个事件驱动、非阻塞式 I/O的模型,使其轻量又高效。(由c++语言编写的)Node.js的包管理器npm,成为世界上最大的开放源代码的生态系统。 简单说:编写高性能网络服务器的javascipt工具包(用于js开发服务端程序) 单线程、异步、事件驱动。
nodejs的特点
快、耗内存多——-网上一个百万级并发测试,未优化的情况下1M的链接消耗了16G内存
nodejs可以做什么
node.js可以解析js代码(没有浏览器安全级别的限制),提供很多系统级别的api,如:文件的读写、进程的管理、网络通信。。。。
为什么要学习nodejs
node-webkit/内核
nodeos/系统
express/框架
jade EJS /模版
forever PM2 /实现负载均衡
log.io/在浏览器打印各种输出的日志
grunt、gulp、webpack/自动化构建工具
mocha 、karma /测试工具
可以辅助前端开发,代替后台开发
Node vs php
优点:性能高 开发效率高 应用范围广
缺点: 新、会的人少 中间件少(函数) IDE不完善
框架的选择
比较热门的包括:
Express(Sails),koa,Hapi
Express:完善、稳定、文档全、社区大
koa :超前(koa2)
Hapi:复杂(一个简单的helloworld都要做很多堆砌),适合复杂的大型项目
egg(阿里巴巴团队刚推出的)
node.js安装
Node.js版本: LTS(长时间支持版本——-推荐)
Current(最新版本,有些api会有变动)
node环境下js文件的执行
创建index01.js文件
console.log("hello nodejs");
终端中进入index01.js所在目录,在终端中执行
node index01.js
nodejs模块化开发规范(commonjs)
定义模块
ajax.js文件
var obj={
get:function(){
},
post:function(){
}
}
module.exports=obj
加载自定义模块
//自定义文件模块 './a.js'
var obj=require('./ajax')
加载 自己安装的 模块
var http=require('gulp');
var http=require('webpack');
加载nodejs内置模块 (不需要安装依赖)
var http=require('http')
搭建第一个服务器
创建server.js
// nodejs内置(原生)模块 不需要安装依赖
//依赖模块
var http=require('http')
var hostname='localhost'
var port=8000;
var obj=require('./common')
http.createServer((req,res)=>{
// req==request 请求对象
// res==response 响应对象
//头部
res.setHeader('content-type','text/html;charset=utf-8')
// 状态码
res.statusCode=200;
console.log(req.url)
// 过滤掉对ico图标请求,提高性能
if(req.url!='/favicon.ico'){
// res.write('2')
// // 结束标识
// res.end()
// obj.fn1(req,res)
say(req,res)
}
}).listen(port,hostname,()=>{
console.log('服务器已经启动')
})
function say(req,res){
res.write('你好')
res.end()
}
在终端中执行server.js 文件
node server.js
简化版
var http=require('http');
http.createServer((req,res)=>{
res.writeHead(200,{'content-type':'text/html;charset=utf-8','Access-Control-Allow-Origin':"*"})
if(req.url!='/favicon.ico'){
res.write('hello world')
res.end()
}
}).listen(3000)
推荐一个工具
每次修改完js文件的代码必须要重新 使用node 命令执行js文件,比较浪费事件
supervisor 可以监听文件的变量并自动执行js文件
自动更新nodejs 代码,并执行
安装 npm install supervisor -g
启动 supervisor xxxx.js
可以不用执行node,自动更新(supervisor)
Nodejs-api url
操作:--require(‘url’)
node url——提供很多方法
url.parse(urlString)查询url信息
url.format(urlObject)将信息解析成正常的url地址
var url=require('url')
console.log(url.parse('http://www.baidu.com/api#aaa/bb?id=1234'))
var str={
protocol: 'http:',
slashes: true,
auth: null,
host: 'www.baidu.com',
port: null,
hostname: 'www.baidu.com',
hash: null,
search: null,
query: null,
pathname: '/api',
path: '/api',
href: 'http://www.baidu.com/api' }
console.log(url.format(str))
Query String
querystring模块用于实现URL参数字符串与参数对象的互相转换,示例如下。
require(‘querystring’)
querystring.parse(str[, sep[, eq[, options]]])转换成对象
querystring.stringify(obj[, sep[, eq[, options]]])转换成字符串
var querystring = require('querystring');
var str=querystring.stringify({'name':'hello','age':10})
var str=querystring.parse('name=hello&age=10')
console.log(str)