node.js简介
Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的 JavaScript运行环境,使用了一个事件驱动 、非阻塞式I/O模型, 让JavaScript 运行在服务端 的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。
node.js服务器的搭建
模块的导入和导出
- 模块的概念:模块的本质是对一个或者多个功能的封装
- 模块的导出:exports,作用:向外界导出一个对象作为导出对象
//先生成两个函数,函数名分别是getRandom和getRandomColor
module.exports={
random:getRandom,
randomColor:getRandomColor,
}
- 模块的导入:require
var operate=require("./operate.js");
- 作用:可以有效相关提高代码的内聚性,降低不同代码之间的耦合度。从而实现代码的高复用性,易维护性和高移植性。
http模块
- 该模块用来快速搭建服务
//该模块主要用来完成服务器的搭建
var http = require('http');
//创建一个服务器
var server = http.createServer(function(request, response){
response.write('你好');
response.end("hello");
});
//启动服务器监听指定的端口
server.listen(8080);
request请求对象
- 该对象主要用来完成服务器的输入操作
- 请求对象在node开发中一般会用到请求对象对应的url和method属性
- request.url用来获取网络请求中对应的网址
- request.method:用来获取网络请求中对应的请求方式
console.log(request.url);//输出结果/:表示根目录
console.log(request.method);//GET
路由:
即路径,用来判断服务器应该提供何种服务
response.setHeader("Content-type","text/html;charset=utf-8");
if(request.url=="/"){
response.write("你好");
}else if(request.url=="/login"){
response.end("ok");
}else if(request.url=="/regist"){
response.end("<h1>下午好</h1>");
}
response响应对象
- 响应对象主要完成的是服务器向外界的数据响应,解决的是服务器的output操作
- response.end():结束本次网络请求,因此该方法的调用一般放在所有服务器的最后面,end结束请求时可以向外界传递一次数据。
- response.write():向外界传递数据。但是该方法只能传递数据无法结束网络请求,因此开发中write可以被调用多次。
- response.setHeader(key, value)–设置响应对象的报头,帮助浏览器更加准确的识别到对应的数据。
response.setHeader("Content-type","text/json;charset=utf-8");
url模块
用来完成网络请求GET网址的数据解析,可以分别获取网址和参数。同时参数默认是以字符串格式
返回,如果需要将参数以对象格式返回需要设置queryParseString字段
var result = url.parse(request.url, true);
//true用来设置当前的GET网址中参数数据以对象格式返回
request模块
用来完成服务器端的网络请求,主要适用场景代理跨域。
实现步骤如下:
- 在本地启动一个代理服务器,前端向该代理服务器发起网络请求,设置该代理服务器允许跨
域
// 创建一个服务器
var server=http.createServer(function(request,response){
response.setHeader("Content-type","text/json;charset=utf-8");
// 设置允许所有服务器跨域
response.setHeader("Access-Control-Allow-Origin", "*");
});
- 本地代理服务器接收到请求以后通过request模块向目标服务器发起请求,并且通过回调等待
响应结果
// 创建一个服务器
var server=http.createServer(function(request,response){
response.setHeader("Content-type","text/json;charset=utf-8");
// 设置允许所有服务器跨域
response.setHeader("Access-Control-Allow-Origin", "*");
// 代理跨域
console.log(request.url);
requests("https://api.jisuapi.com"+request.url,function(err,res,body){
if(err){
response.end(JSON.stringify({code:500,err:err}));
}
console.log(body);
response.end(body);
})
});
html:
<body></body>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script>
$.ajax({
url:"http://127.0.0.1:8080/news/get?channel=头条&start=0&num=10&appkey=f6dff5851c980b00",
success:function(res){
console.log(res);
}
})
</script>
post请求:
var request = require('request');
var url="请求url";
var requestData="需要传输的数据";
request({
url: url,
method: "POST",
json: true,
headers: {
"content-type": "application/json",
},
body: JSON.stringify(requestData)
}, function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // 请求成功的处理逻辑
}
});