1、介绍css
Node.js是一个让JavaScript运行在服务器端的开发平台,它让JavaScript的触角伸到了服务器端。html
但Node彷佛有点不一样:node
● Node.js不是一种独立的语言,与PHP、JSP、Python、Perl、Ruby的“既是语言,也是平台”不一样,Node.js的使用JavaScript进行编程,运行在JavaScript引擎上(V8)。程序员
● 与PHP、JSP等相比,Node.js跳过了Apache、Nginx、IIS等HTTP服务器,它本身不用建设在任何服务器软件之上。Node.js的许多设计理念与经典架构(LAMP)有着很大的不一样,能够提供强大的伸缩能力。apache
Node.js自身哲学,是花最小的硬件成本,追求更高的并发,更高的处理性能。npm
2、安装nodejs编程
Node的官网地址:https://nodejs.orgjson
Node的中文网站:http://nodejs.cn/api/api
提示:①若是你的电脑是32位的,你就下载32,通常是64的通常就是下载MSI版本的64位的就能够。数组
②无脑下一步 node -v 查看的是node的版本号
环境变量的设置
①window+R->输入CMD
②找打计算机此电脑点击-属性
③点击高级系统设置
④选择环境变量的设置按钮
3、node的基本使用
一、提示:将JS文件直接拖拽到浏览器,你会发现执行不了,由于JS须要宿主环境,我们已经知道的宿主环境是静态页面。
for(var i = 0;i<10;i++){
if(i%2==0){
console.log(i);
}
}
二、宿主环境-node平台
第一步:打开命令终端 window+R,
输入CMD命令进入;
第二步:输入cd(change directory) +空格 +文件夹的路径(进入到某一个文件夹)
第三步:先运行那个JS文件你就node谁
node +js文件名
提示:按住shift+右键选择(在此处打开命令窗口),想执行谁就node谁 node +tab(补齐js文件)
注意:①js文件当中有window、document对象吗?
如今我们的JS文件没有window对象,也没有document,也没有getElementByid这些东西都没有了,所以如今的JS宿主环境是node,不是任何的浏览器,由于浏览器才有window、document?
②如今的JS文件你能够作哪些操做?
基本的JS语法均可使用,变量、循环语句、条件语句,函数;也就说JS语法的核心部分均可以使用;
若是你的JS文件发生变化,你须要再次保存,再次node才能执行;
4、搭建服务器
1初识node服务器
//须要引入内置的HTTP模块 var http = require("http"); //返回的http对象有一个createServer方法,这个方法能够建立服务器,传递是一个callBack //有两个形参 req(请求) res(response) var server= http.createServer(function (req,res) { //输出一些东西 //从新设置一下字符集 res.setHeader("Content-type","text/html;charset=utf8"); res.write("你好,我是node.js,欢迎访问个人服务器"); res.write("<br/>"); res.write("<h1>我是h1标签</h1>"); res.write("你好,我是node.js,欢迎访问个人服务器"); res.write("你好,我是node.js,欢迎访问个人服务器"); res.write("你好,我是node.js,欢迎访问个人服务器"); res.write("你好,我是node.js,欢迎访问个人服务器"); res.end("Hello Word"); }); //监听端口号 0-6万多,可是我们的apache已经占用80 server.listen(3000);
注意: ①node一个特性:事件的驱动,当你访问服务器的时候,服务才执行本身的回调函数;
②用Node生生的建立了一个服务器;哪怕用户没有node环境也能够访问个人服务器。
③若是你的服务器开启,那么你的终端窗口不能关闭;
④res.write、res.end这两个方法当中不能出现数字,只能是字符串;
⑤当你改变js文件的时候,你会发现我们CMD窗口,光标一直挂起,ctr+c打破鼠标挂起的状态;
⑥res.setHeader("Content-type","text/html;charset=utf8");这是一下响应头;
⑦write方法能够有多个,可是必需要有一个end的法方法,不然会一直加载;
二、外置页面
//内置的http模块 var http = require("http"); //须要一个fs内置模块(file)server) var fs = require("fs"); http.createServer(function (req,res) { //系统内置的fs模块有一个readFile一个方法 fs.readFile("./public/1.wangjunka.html",function (err,data) { res.end(data); }) }).listen(3000);
提示:①之后若是操做的是文件的操做,都是使用的内置fs,readFile(path,callBack)
3.路由(router)的学习
概述:路由就是我们的URL的设计,你会发现node当中的路由是咱们这些程序员能够本身定义的。
//内置的http模块 var http = require("http"); //须要一个fs内置模块(file)server) var fs = require("fs"); http.createServer(function (req,res) { res.setHeader("Content-type","text/html;charset=utf8"); if(req.url==="/wangjunkai"){ //系统内置的fs模块有一个readFile一个方法 fs.readFile("./public/1.wangjunka.html",function (err,data) { //输出文件流 res.end(data); }) }else if(req.url==="/zhangjie"){ //系统内置的fs模块有一个readFile一个方法 fs.readFile("./public/2.zhangjie.html",function (err,data) { //输出文件流 res.end(data); }) }else{ res.end("对不起,你的URL有错误"); } }).listen(3000);
提示:①req这个请求的对象,自生有一个url属性,能够获取到客户端传递过来的URL的数据;
②就能够和URL配合写路由清单;
//内置的http模块 var http = require("http"); //须要一个fs内置模块(file)server) var fs = require("fs"); http.createServer(function (req,res) { //这个路由访问的是王俊凯的页面 if(req.url==="/wangjunkai"){ res.setHeader("Content-type","text/html;charset=utf8"); //系统内置的fs模块有一个readFile一个方法 fs.readFile("./public/1.wangjunka.html",function (err,data) { //输出文件流 res.end(data); }) //这个路由访问的是张杰的页面 }else if(req.url==="/zhangjie"){ res.setHeader("Content-type","text/html;charset=utf8"); //系统内置的fs模块有一个readFile一个方法 fs.readFile("./public/2.zhangjie.html",function (err,data) { //输出文件流 res.end(data); }) //这个是王俊凯的页面的样式表的路由 }else if (req.url==="/public/wangjunkai.css") { res.setHeader("Content-type","text/css"); fs.readFile("./public/wangjunkai.css",function (err,data) { //输出文件流 res.end(data); }) //这个是张杰图片的路由 }else if (req.url==="/shuaige/1.jpg") { res.setHeader("Content-type","text/img"); fs.readFile("./public/1.jpg",function (err,data) { //输出文件流 res.end(data); }) }else{ res.end("URL地址错误"); } }).listen(3000);
知乎的路由设置
var http = require("http"); var server = http.createServer(function (req,res) { //获取地址栏地址 var url = req.url; var array =url.match(/^\/user\/(.+)\/(.+)$/); //若是数组为空;表明的是没有匹配到不执行下面语句 if(!array){ return; } //这两个变量是捕获到的数据 var $1 = array[1]; var $2 = array[2]; var json1 = { "zhangjie":"张杰", "kebi":"科比", "dilireba":"迪丽热巴", "zhaoliying":'赵丽颖' } var json2 = { 'asks':"回答", "pins":"想法" } //设置一下响应头 res.setHeader("Content-type","text/html;charset=utf8"); //输出 res.end("我是"+json1[$1]+"个人"+json2[$2]); }); server.listen(3000);
5、模块
1.node 当中你须要哪个js文件,你就require()
//这个是app.js var a = require("./a.js"); //这个是a.js console.log("我是0.1.js文件啊");
提示:你会发现,在a.js文件中申明的变量b在app.js当中不可使用;由于node所有的js文件它们的做用域天生是隔离的;由于没有window对象;
2.exports 对外暴露
//app.js文件 var a = require("./a.js"); console.log(b); //a.js文件 var b = 100;
//对于暴露基本的数据:好比变量、函数就能够用exports方法 a.js exports.b = 100; exports.sum = function ($1,$2) { return $1+$2; }
提示:①app.js文件要使用a.js文件var a = require("./a.js");变量名称和文件名称要统一;
②对于一个js文件暴露数据exports进行。通常暴露的是基本数据类型(数字、字符串)变量、函数
3.module.exports对外暴露类
//app.js var People = require("./People.js"); var xiaoming = new People("小明",18,"男"); xiaoming.say(); //People.js function People (name,age,sex) { this.name = name; this.age = age; this.sex = sex; } //原型对象的方法 People.prototype.say = function (argument) { console.log("我是"+this.name); } module.exports = People;
提示:①若是某一个JS文件对外暴露的是一个类,它须要用的是module.exports = People这种方式暴露类;
好处 不用向这种方式去执行(new People.People("小明",18,"男");,而是和咱们前面学些的执行构造函数的方式是同样的;
②引用文件的变量的名必须和引用的js文件名一直;
四、引用文件夹
//app.js var jihe = require("./jihe"); console.log(jihe.yuan.mianji(1)); console.log(jihe.juxing.zhouchang(2,3)); 提示:若是你引进的是某一个文件夹,系统会自动的进入文件夹当中的index.js文件当中; //index.js var juxing = require("./juxing.js"); var yuan = require("./yuan.js"); //暴露矩形对象和圆对象 exports.yuan = yuan; exports.juxing = juxing; //juxing.js exports.zhouchang = function (a,b) { return 2*(a+b); } exports.mianji = function (a,b) { return a*b; } //yuan.js exports.zhouchang = function (r) { return 2*3.14*r; } exports.mianji = function (r) { return 3.14 * r *r; }
五、神奇的node_modules文件夹
var jihe = require("jihe"); console.log(jihe.yuan.mianji(1)); console.log(jihe.juxing.zhouchang(2,3));
提示:若是你将某一个文件夹放在了node_modules文件当中,那么你使用这个文件夹当中功能,你就能够省略相对路径;
什么是一个模块?
一个JS文件就是一个模块,一个文件夹它也是一个模块;
你能够认为是一个轮子,这个轮子你想使用的时候,就能够require();
6、npm社区(node 代码轮子社区)
Npm社区地址:https://www.npmjs.com/
第一步:引入它人的模块 npm install nzh
第二步:照着人家的API直接使用
var nzhcn = require("nzh/cn"); var solarLunar = require("solarLunar"); var xlsx = require("node-xlsx"); var fs = require("fs"); //这个是NZH使用 console.log(nzhcn.encodeS(123456)); console.log(nzhcn.encodeS("1.23456789e+21")); //农历所以的转换 var solar2lunarData = solarLunar.solar2lunar(2015, 10, 8); console.log(solar2lunarData.gzYear+solar2lunarData.gzMonth+solar2lunarData.gzDay); //excel导出 var data = [[1, 2, 3], [true, false, null, 'sheetjs'], ['foo', 'bar', new Date('2014-02-19T14:30Z'), '0.3'], ['baz', null, 'qux']]; var buffer = xlsx.build([{name: "mySheetName", data: data}]); fs.writeFile("./贝勒爷. xlsx",buffer);
提示:①使用模块的时候,你须要npm install nzh solarlunar node-xlsx
②须要谁就require()谁
③node_modules文件夹在你下载模块的时候,自动就有了