一篇文章带你了解Nodejs

1.什么是node.js?
node.js是一个基于Chrome v8引擎的javascript 运行环境。Node.js使用了一个事件驱动、非阻塞式 I/O的模型,使其轻量又高效。(由c++语言编写的)Node.js的包管理器npm,成为世界上最大的开放源代码的生态系统。 简单说:编写高性能网络服务器的javascipt工具包(用于js开发服务端程序) 单线程、异步、事件驱动。

node.js是一个Javascript运行环境(runtime)

Node.js 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。

Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。V8引擎执行Javascript的速度非常快,性能非常好。 。

NPM:全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载、安装、上传以及管理已经安装的包。 它已经成为了非官方的发布Node模块(包)的标准。

nodejs自身提供了基本的模块,但是开发实际应用过程中仅仅依靠这些基本模块则还需要较多的工作。幸运的是,Nodejs库和框架为我们提供了帮助,让我们减少工作量。但是成百上千的库或者框架管理起来又很麻烦,有了NPM,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。

使用NPM,必须安装NodeJS。

安装nodejs ,去官网下载https://nodejs.org/en/,LTS为长期稳定版,下载这个即可。安装直接双击nodejs.exe,疯狂下一步即可!

2.nodejs的特点
快、耗内存多——-网上一个百万级并发测试,未优化的情况下1M的链接消耗了16G内存

3.nodejs可以做什么
node.js可以解析js代码(没有浏览器安全级别的限制),提供很多系统级别的api,如:文件的读写、进程的管理、网络通信…

4.为什么要学习nodejs
1.node-webkit/内核
2.nodeos/系统
3.express/框架
4.jade EJS /模版
5.forever PM2 /实现负载均衡
6.http://log.io/在浏览器打印各种输出的日志
7.grunt、gulp、webpack/自动化构建工具
8.mocha 、karma /测试工具
9.可以辅助前端开发,代替后台开发

Node vs php
优点:性能高 开发效率高 应用范围广
缺点: 新、会的人少 中间件少(函数) IDE不完善

框架的选择
比较热门的包括:
Express(Sails),koa,Hapi
Express:完善、稳定、文档全、社区大
koa :超前(koa2)
Hapi:复杂(一个简单的helloworld都要做很多堆砌),适合复杂的大型项目
egg(阿里巴巴团队刚推出的)
5.node.js安装
Node.js版本: LTS(长时间支持版本——-推荐)
Current(最新版本,有些api会有变动)

6.node环境下js文件的执行
创建index01.js文件
console.log(“hello nodejs”);
终端中进入index01.js所在目录,在终端中执行
node index01.js
7.nodejs模块化开发规范(commonjs)
定义模块
ajax.js文件
varobj={
get:function(){
},
post:function(){
}
}
module.exports=obj

加载自定义模块
//自定义文件模块 ‘./a.js’
varobj=require(‘./ajax’)
npm安装模块

npm常用命令
npm -v:查看npm安装的版本。
npm init:会引导你创建一个package.json文件,包括名称、版本、作者等信息。
npm list:查看当前目录下已安装的node包。
npm ls:查看当前目录下已安装的node包。
npm install moduleNames:安装Node模块到本地目录node_modules下。
npm install -g:将包安装到全局环境中。
npm install --save:安装的同时,将信息写入package.json中
项目路径中如果有package.json文件时,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包,这样代码提交到git时,就不用提交node_modules这个文件夹了。
npm install --save-dev:安装的同时,将信息写入package.json中项目路径中如果有package.json文件时,直接使用npm install方法就可以根据devDependencies配置安装所有的依赖包,这样代码提交到git时,就不用提交node_modules这个文件夹了。
npm uninstall moudleName:卸载node模块。

加载自己安装的模块
var http=require(‘gulp’);
var http=require(‘webpack’);

加载nodejs内置模块 (不需要安装依赖)
var http=require(‘http’)

8.nrm使用
什么是nrm
nrm 是一个 npm 源管理器,允许你快速地在 npm 源间切换
安装nrm
在命令行执行命令,npm install -g nrm,全局安装nrm。
使用
执行命令nrm ls查看可选的源
切换
如果要切换到taobao源,执行命令nrm use taobao
9.Nodemon 使用
  修改代码后,需要重新启动 应用,所做的修改才能生效。若之后的每次代码修改都要重复这样的操作,势必会影响开发效率
Nodemon,它会监测项目中的所有文件,一旦发现文件有改动,Nodemon 会自动重启应用。
安装及使用
  全局安装 nodemon 包,这样新创建的 Node.js 应用都能使用 Nodemon 运行起来了
npm install -g nodemon
  安装完成之后,Nodemon 就可以启动 Express 应用了,先关闭当前正在执行的应用程序,然后再执行命令:
nodemon index.js
  默认地,nodemon会自动打开index.js。所以,也可以使用如下命令
nodemon
  通过 Nodemon 启动应用之后,不管是修改了代码,还是安装了新的 npm 包,Nodemon 都会重新启动应用
10.搭建第一个服务器
创建server.js
// nodejs内置(原生)模块 不需要安装依赖
//依赖模块
var http=require(‘http’)
var hostname=‘localhost’
var port=8000;
var obj=require(‘./common’)
http.createServer((req,res)=>{
// reqrequest 请求对象
// 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(‘服务器已经启动’)
})
functionsay(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)
11.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))
12.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)

path 模块提供了一些用于处理文件路径的小工具,我们可以通过以下方式引入该模块:
var path = require(“path”);

// 格式化路径
console.log(‘normalization : ’ + path.normalize(’/test/test1//2slashes/1slash/tab/…'));

// 连接路径
console.log(‘joint path : ’ + path.join(’/test’, ‘test1’, ‘2slashes/1slash’, ‘tab’, ‘…’));

// 转换为绝对路径
console.log('resolve : ’ + path.resolve(‘main.js’));

// 路径中文件的后缀名
console.log('ext name : ’ + path.extname(‘main.js’));

13.File System-node操作文件
fs(file system)跟文件相关的方法—require(‘fs’)
1)stat() 获取文件的一些信息
2)mkdir() 新增目录的
3)writeFile(url,con,fc) 书写文件
4)appendFile(url,con,fc) 追加文件内容
5)读取文件的内容:readFile(url,fc)
6)列出目录的东西:readdir
7)重命名目录或文件:rename
8)删除目录与文件:rmdir(目录),unlink(文件) readdirSync(src) 同步读取目录信息
var fs=require(‘fs’)

//获取信息的时候 错误回调优先
fs.stat(‘./demo.html’,(err,data)=>{
console.log(data.isFile())
})

// 创建目录
fs.mkdir(‘./log’,()=>{
console.log(‘success’)
})

// 写入文件
fs.writeFile(‘./log/mm1.log’,‘hello’,()=>{
console.log(‘success’)
})

// 追加文件内容
fs.appendFile(‘./log/hello.log’,‘----world’,()=>{
console.log(‘success’)
})

// 读取文件内容
fs.readFile(‘./log/hello.log’,(err,data)=>{
console.log(data.toString())
})

// 读取目录
fs.readdir(‘./log’,(err,data)=>{
console.log(data)
})

// 重命名
fs.rename(‘./log/hi.log’,‘./log/his.log’,()=>{
console.log(‘success’)
})
// 删除文件
fs.unlink(‘./log/hello.log’,()=>{
console.log(‘success’)
})

// 删除目录–删除的是空文件夹
fs.rmdir(‘./logs’,()=>{
console.log(‘success’)
})

//同步操作 读文件
console.log(fs.readdirSync(‘./log’))

*陆荣涛前端学习交流Q群858752519
加群备注:CSDN推荐

猜你喜欢

转载自blog.csdn.net/sdasadasds/article/details/125684009