node.js基础入门

为什么学习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')) 

以上为总结部分,若有不当之处,请大家多多指正(抱拳)

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值