目录
一 什么是nodejs
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。
二 node.js的用处(为何选择node.js)
NodeJS的作者说,他创造NodeJS的目的是为了实现高性能Web服务器,他首先看重的是事件机制和异步IO模型的优越性,而不是JS。但是他需要选择一种编程语言实现他的想法,这种编程语言不能自带IO功能,并且需要能良好支持事件机制。JS没有自带IO功能,天生就用于处理浏览器中的 DOM事件,并且拥有一大群程序员,因此就成为了天然的选择。
三 nodejs安装
1、官网下载安装包
https://nodejs.org/en/download/
◆ 一顺安装完成后,在cmd控制台输入:node -v,控制台将打印出:v4.2.1,出现版本提示表示安装成功。
◆ 新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以使用cmd命令行输入”npm -v”来测试是否成功安装。
2、配置
♠ 配置用户名称和e-mail地址
当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中
$ git config --global user.name "eatgirl_hui"
$ git config --global user.email "xxxxxx"
♠ 配置编辑器
本人使用webstorm编辑器
选择文件–>设置–>语言和框架–>Node.js and NPM;
Node interpreter会自动识别,点击Configure选项,下载node.js的source code包;
下载完成点击configure即可。
♠ 检查配置
$ git config --list
♠ 获取帮助
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
四 node.js的学习
(一)常用的全局变量global
node.js常用内置对象和方法
1、console
//(1)输出里面的信息,warn和error的颜色同log、info不同
console.log("this is a log");
console.info("this is an info");//信息
console.error("this is an error");//错误
console.warn("this is a warn");//警告
//(2)测时间 console.time/console.timeEnd,输出test: 2ms
console.time("test");
for(var i=0;i<1000000;i++){}
console.timeEnd("test");//注:需要和time里的参数字符串保持一致
2、process
//process设置编码(注意:只设置如此就ok,不可设置gbk等)
process.stdin.setEncoding("utf-8");
process.stdin.on
两种控制台输入,输出文字信息方法:”data”和”readable”
//1、输入文字,然后输出(手动输入,然后会输出)
process.stdin.on("data",function(data){
console.log(data);
});
//2、输入文字,然后输出
process.stdin.on("readable",function(){
var aa=process.stdin.read();
console.log(aa);
});
退出触发事件:”exit”
//退出触发事件
process.on("exit", function () {
console.log("this will exit");
});
改变退出的默认行为
process.on("SIGINT",function(){
console.log("process has a sigint")
});
process.cwd()
//受webstrom的限制结果相同
//console.log("dirname:"+__dirname);
//console.log(process.cwd());//执行node命令的目录
process.argv
获取附加信息
//process.argv可获取附加信息
console.log(process.argv);
// 输出结果如下
//[ 'E:\\soft\\nodejs\\node.exe',
// 'c:\\Users\\hui\\WebstormProjects\\myproject\\globle.js' ]
(二)模块和包
通过require引入模块
var sum = require("./sum");
console.log(sum.sum(100));
通过exports输出
//求和函数
function sum(n){
var sum = 0;
for(var i=1;i<=n;i++){
sum += i;
}
return sum;
}
exports.sum = sum;
文件相关操作的相关内容fs和path
fs
规则:模块的名字和包的名字保持一致
同步代码会阻塞下面代码的执行
异步读取不会阻塞下面代码的执行
var fs = require("fs");
//异步读取方法readFile
fs.readFile('sum.js','utf-8', function (err,data) {
if(err){
console.log(err);
}else{
console.log(data);
}
});
//同步读取readFileSync
var data = fs.readFileSync('sum.js', 'utf-8');
console.log(data);
path
var path=require('path');
console.log(path.sep);//不同平台的分隔斜杠符不同
console.log(path.extname('a.jpg'));//获取最后的扩展名,输出为.jpg
(三)创建一个web服务器
在浏览器中请求响应机制如下:
Node Http Server:
require(‘http’)
var server = http.createServer(cb);
端口:在服务器硬件上或操作系统中运行的程序
url:http(url请求的协议)://www.baidu.com(百度网站的域名)(:80(省略的端口号))*/s?…….*(提交的参数get请求的参数会在url中)
var http = require('http'),
fs = require('fs'),//加载文件
server = http.createServer(function(request,response){
fs.readFile('index.html','utf-8',function(err,data){
response.end(data);//响应结束
});
});
//启动server需要监听端口
//http默认是80端口
//端口号是从1~65535
server.listen(8080);
以下程序说明:
一个程序只能被一个端口号监听
一个端口号只能被一个程序监听
var http = require('http');
http.createServer(function(request,response){
}).listen(8080);
//输出报错信息
//events.js:141
//throw er; // Unhandled 'error' event
//^
//
//Error: listen EADDRINUSE :::8080
另外也可以这样写
var http = require('http'),
fs = require('fs'),
url = require('url');
http.createServer(function(request,response){
var urlobj = url.parse(request.url);
console.log(urlobj);
var pathname = urlobj.pathname;
var query = urlobj.query;
if(pathname==='/'){
readFileAndResponse('/index.html',response);
}else if(pathname==='/ajax'){
response.end('this is a ajax response');
}else{
readFileAndResponse(pathname,response);
}
}).listen(8080);
function readFileAndResponse(pathname,response){
fs.readFile(pathname,'utf-8', function (err,data) {
if(err){
response.writeHead(404);
response.end('file not found');
}else{
response.end(data);
}
});
}
本章所讲的示例demo下载:demo