为什么学习node.js
node.js可以辅助前端开发,代替后端开发(但其还是不能和java比),node.js与php相比来说,他的优点是:性能高,开发效率高,应用范围广,其缺点是:新型语言,函数少,ide(开发环境,编译器)不完善
什么是node.js?
node.js是基于chrome v8引擎的JavaScript运行环境。node.js使用了一个事件驱动,非阻塞式i/o的模型,由c++编写,轻量高效,并且node.js的npm包管理器是世界上最大的开放源码的生态系统。简单来说,node.js就是编写高性能网络服务器的JavaScript工具包,单线程,异步,事件同步。
node.js的特点是:快,但是其消耗内存也高,node.js可以解析js代码,没有浏览器安全级别的限制,可以提供很多系统级别的api,比如文件的读写,删除,进程的管理,网络通信等。
关于node.js框架
热门框架有express(完善,稳定,文档全,社区大),koa(超前),hapi(复杂,适合大型项目)
下列我们来搭建第一个服务器
一般来说我们本地的服务器地址为http://127.0.0.1:3000或者http://127.0.0.1:8080等。。。
那么我们需要配置这四个步骤,协议:http/https(https的安全性更高但是我们不能够自行搭建)、主机名:localhost/127.0.0.1、端口:8080/8000/3000
以下为代码;
const http=require('http');//前提你要有nodejs环境
//导入nodejs提供的内置模块(原生模块)
//require('webpack')//导入依赖模块(外部模块)
//require('./common.js')//导入自定义文件模块
const hostname='127.0.0.1';
const port=3000;
//服务器
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('hello nodejs')
// 结束响应标识
res.end()
}
}).listen(port,hostname,()=>{
console.log(`本机地址为:http://${hostname}:${port}`)
})

嫌上面代码麻烦????,那么我们来个简短的
const http=require("http");
http.createServer((req,res)=>{
res.writeHead(200,{'content-text':'text/html:charset=utf-8'})//此处将setheader 和statuscode合并为了一行代码
if(req.url!='/favicon.ico'){
res.write("emmmm hello gay");
res.end();
}
}).listen(3000)
以上两种方法为基础的服务器配置方法,如果配置成功,那么我们已经迈出了一小步啦,接下来我们就可以自己写一组数据,然后吧接口提供给前端,下面我给大家演示一个简单例子;
我们先写了一个commons.js 文件
var foo={
fn1:function(req,res){
res.write("我是刘德华");
res.end();
},
fn2:function(req,res){
res.write("我是金城武");
res.end();
}
}
//我们先写一个简单对象;要让对象在sever里面能够被访问,我们需要给他暴露出去;
module.exports=foo;
然后在sever.js里面引入commons.js
const http=require("http");
const hostname='127.0.0.1';
const port=8080;
const obj = require("./commons")//链入commons文件
http.createServer((req,res)=>{
res.setHeader('content-type','text/html;charset=utf-8')
res.statusCode=200;
if(req.url!='/favicon.ico'){
res.write("hello nodejs")
obj.fn1(req,res)//调用fn1函数
}
}).listen(port,hostname,()=>{
console.log(`本机地址为http://${hostname}:${port}`)
})
就可以调用数据啦
接下来 那 我们来个简单的向后台传输数据
首先我们写好html代码 我们定义两个input
<input type="text" class="sr"/>
<input type="button" class="btn" />
然后咧 引入一下jquery,并写ajax用来传输数据
<script type="text/javascript" src="jquery-1.11.0.js" ></script>
<script>
$(".btn").click(function(){
$.ajax({
type:"post",
url:"http://127.0.0.1:8080",
data:{"name":$(".sr").val()},
success:function(){
console.log("success");
}
})
})
我们向后台传输一个json数据
设置后台信息
const http=require("http");
const hostname='127.0.0.1';
const port=8080;
const obj = require("./commons")
http.createServer((req,res)=>{
res.setHeader('content-type','text/html;charset=utf-8');
res.setHeader('Access-Control-Allow-Origin','*');
res.statusCode=200;
if(req.url!='/favicon.ico'){
req.on('data',(data)=>{
console.log(data.toString())
})
}
}).listen(port,hostname,()=>{
console.log(`本机地址为http://${hostname}:${port}`)
})
我们用req.on接收前端传来的data数据 如果console.log(data)会输出类似这样的一组数据,需要用tostring进行转换
我们在文本框进行输入测试
emmmm接下来说一哈EventEmitter,主要用于事件触发和事件监听 on用于绑定函数,emit用于触发函数
const EventEmitter=require("events");
class Person extends EventEmitter{};
var person=new Person();
person.on('play',(data)=>{
console.log("who is the boss"+data)
})
person.emit("play","i");
person.emit("play","am");
person.emit("play","the");
person.emit("play","boss");
运行结果:

当使用person.once 则下面的person.emit不管多少个都执行第一个
nodejs.url 问题
url.parse()查询url信息
首先进入node环境 我们用url.parse查询url

url.format()将url解析成正常url 将上述str重新拼接成url
const url=require('url');
// console.log(url.parse('http://www.baidu.com/api?age=22'))
var str={
protocol: 'http:',
slashes: true,
auth: null,
host: 'www.baidu.com',
port: null,
hostname: 'www.baidu.com',
hash: null,
search: '?age=22',
query: 'age=22',
pathname: '/api',
path: '/api?age=22',
href: 'http://www.baidu.com/api?age=22' }
console.log(url.format(str))

url.resolve()将两个url解析成一个完整url
const url=require('url');
// console.log(url.parse('http://www.baidu.com/api?age=22'))
var str={
protocol: 'http:',
slashes: true,
auth: null,
host: 'www.baidu.com',
port: null,
hostname: 'www.baidu.com',
hash: null,
search: '?age=22',
query: 'age=22',
pathname: '/api',
path: '/api?age=22',
href: 'http://www.baidu.com/api?age=22' }
console.log(url.resolve('http://www.baidu.com','/api?age=22'))