Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)(下)

简介: Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)

Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)(上):https://developer.aliyun.com/article/1420280


Node.js GET/POST请求(二)



1、获取Get请求内容

//浏览器访问地址
http://localhost:3030/?name=%27baizhan%27&&age=10
const http = require('http')
const url = require('url')
const server = http.createServer(function (req, res) {
  res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
  //使用url.parse将路径里的参数解析出来
  const { query = {} } = url.parse(req.url, true)
  for ([key, value] of Object.entries(query)) {
    res.write(key + ':' + value)
 }
  res.end();
})
server.listen('3030', function () {
  console.log('服务器正在监听3030端口')
})


Node.js 路由



我们要为路由提供请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据来执行相应的代码。

const http = require('http')
const url = require('url')
const server = http.createServer(function (req, res) {
  //获取请求路径
  const pathname = url.parse(req.url).pathname;
  if (pathname == '/') {
    res.end('hello')
 }else if (pathname == '/getList') {
    res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
    res.write(JSON.stringify({ recrods: [{ name: 'fyx' }] }))
    res.end()
 }else{
    res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
    res.end('默认值')
 }
})
server.listen('3030', function () {
  console.log('服务器正在监听3030端口')
})


整理

//router.js
module.exports=(pathname,res)=>{
  if (pathname == '/') {
    res.end('hello')
 }else if (pathname == '/getList') {
    res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
    res.write(JSON.stringify({ recrods: [{ name: 'fyx' }] }))
    res.end()
 }else{
    res.end('默认值')
 }
}
//test.js
const http = require('http')
const url = require('url')
const router = require('./router')
const server = http.createServer(function (req, res) {
  const pathname = url.parse(req.url).pathname;
  router(pathname,res)
})
server.listen('3030', function () {
  console.log('服务器正在监听3030端口')
})


Node.js 创建客户端



//client.js
var http = require('http');
// 用于请求的选项
var options = {
     host: 'localhost',
     port: '3030',
     path: '/' 
};
// 处理响应的回调函数
var callback = function(response){
 // 不断更新数据
 var body = '';
 response.on('data', function(data) {
   body += data;
 });
 response.on('end', function() {
   // 数据接收完成
   console.log(body);
 });
}
// 向服务端发送请求
var req = http.request(options, callback);
req.end();
//server.js
const http=require('http')
const url=require('url')
const server = http.createServer(function (req, res) {
  const {pathname}=url.parse(req.url)
  if (pathname == '/') {
    res.write('hello')
 res.write('xiaotong')
 res.end()
 }
})
server.listen('3030', function () {
  console.log('服务器正在监听3030端口')
})


Node.js 作为中间层



//test.js
const http = require('http')
const url = require('url')
const server = http.createServer(function (req, res) {
  const pathname = url.parse(req.url).pathname;
  // 用于请求的选项
  var options = {
    host: 'localhost',
    port: '8080',
    path: pathname,
    method:req.method,
    headers:{token:'xxxxx'}
 };
  // 处理响应的回调函数
  var callback = function (response) {
    const {headers= {},statusCode}=response
    res.writeHead(statusCode, {...headers})
    response.pipe(res)
 }
  // 向服务端发送请求
  var req = http.request(options, callback);
  req.end();
})
server.listen('3030', function () {
  console.log('服务器正在监听3030端口')
})
//server.js
const http=require('http')
const server=http.createServer((req,res)=>{
  const {headers={}}=req
  res.writeHead(200,{'Content-Type': 'application/json; charset=utf-8'})
  if(headers.token){
      res.end(JSON.stringify({code:0,message:'成功',data:[]}))
 }else{
     res.end(JSON.stringify({code:-1,message:'您还没有权限'}))
 }
})
server.listen('8080',function(){
  console.log('服务器正在监听8080端口')
}) 


Node.js 文件系统模块(一)



fs 模块提供了许多非常实用的函数来访问文件系统并与文件系统进行交互。


文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync() 。

var fs = require("fs");
// 异步读取
fs.readFile('input.txt', function (err, data) {
 if (err) {
   return console.error(err);
 }
 console.log("异步读取: " + data.toString());
});
// 同步读取
var data = fs.readFileSync('input.txt');
console.log("同步读取: " + data.toString());
console.log("程序执行完毕。");
目录
相关文章
|
1月前
|
缓存 JavaScript 安全
nodejs里面的http模块介绍和使用
综上所述,Node.js的http模块是构建Web服务的基础,其灵活性和强大功能,结合Node.js异步非阻塞的特点,为现代Web应用开发提供了坚实的基础。
101 62
|
14天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
14天前
|
缓存 安全 API
http 的 get 和 post 区别 1000字
【10月更文挑战第27天】GET和POST方法各有特点,在实际应用中需要根据具体的业务需求和场景选择合适的请求方法,以确保数据的安全传输和正确处理。
|
1月前
|
JavaScript
Node.js GET/POST请求
10月更文挑战第6天
34 2
Node.js GET/POST请求
|
1月前
|
缓存 JavaScript CDN
一次js请求一般情况下有哪些地方会有缓存处理?
一次js请求一般情况下有哪些地方会有缓存处理?
37 4
|
1月前
|
JSON 编解码 安全
【HTTP】方法(method)以及 GET 和 POST 的区别
【HTTP】方法(method)以及 GET 和 POST 的区别
101 1
|
2月前
|
JSON JavaScript 前端开发
js请求后端9
js请求后端9
34 2
|
存储 Web App开发 监控
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
我们以前使用过的对hbase和hdfs进行健康检查,及剩余hdfs容量告警,简单易用 1.针对hadoop2的脚本: #/bin/bashbin=`dirname $0`bin=`cd $bin;pwd`STATE_OK=...
1053 0
|
Web App开发 新零售 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
1.尽可能地了解需求,系统层面适用开闭原则 2.模块化,低耦合,能快速响应变化,也可以避免一个子系统的问题波及整个大系统 3.
750 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
异步通信 对于BS(Browser-Server 浏览器)架构,很多情景下server的处理时间较长。 如果浏览器发送请求后,保持跟server的连接,等待server响应,那么一方面会对用户的体验有负面影响; 另一方面,很有可能会由于超时,提示用户服务请求失败。
769 0