node.js基础和跨域问题

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模块

  1. 该模块用来快速搭建服务
//该模块主要用来完成服务器的搭建 
var http = require('http');
//创建一个服务器
var server = http.createServer(function(request, response){
    response.write('你好');
    response.end("hello");
});
//启动服务器监听指定的端口
server.listen(8080); 

request请求对象

  1. 该对象主要用来完成服务器的输入操作
  2. 请求对象在node开发中一般会用到请求对象对应的url和method属性
  3. request.url用来获取网络请求中对应的网址
  4. 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响应对象

  1. 响应对象主要完成的是服务器向外界的数据响应,解决的是服务器的output操作
  2. response.end():结束本次网络请求,因此该方法的调用一般放在所有服务器的最后面,end结束请求时可以向外界传递一次数据。
  3. response.write():向外界传递数据。但是该方法只能传递数据无法结束网络请求,因此开发中write可以被调用多次。
  4. 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) // 请求成功的处理逻辑
    }
}); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js 可以通过设置响应头的方式来解决跨域问题。以下是一个使用 Node.js 解决跨域问题的示例代码: ```javascript const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { // 设置响应头,允许所有来源访问 res.setHeader('Access-Control-Allow-Origin', '*'); // 设置响应头,允许跨域访问的方法 res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); // 设置响应头,允许跨域访问的请求头 res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); if (req.method === 'OPTIONS') { // 如果是预检请求,直接返回成功状态码 res.statusCode = 204; res.end(); } else { // 正常请求,返回数据 res.statusCode = 200; res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify({ message: 'Hello, World!' })); } }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); }); ``` 在这个示例中,我们设置了响应头中的 `Access-Control-Allow-Origin` 字段为 `*`,表示允许所有来源访问。同时,我们还设置了 `Access-Control-Allow-Methods` 字段为 `GET, POST, PUT, DELETE`,表示允许跨域访问的方法。最后,我们还设置了 `Access-Control-Allow-Headers` 字段为 `Content-Type`,表示允许跨域访问的请求头。 需要注意的是,在处理跨域请求时,浏览器会先发送一个预检请求(OPTIONS 请求),来确定服务器是否允许跨域访问。因此,我们在代码中需要判断请求是否为预检请求,并在预检请求时直接返回成功状态码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值