一、GET/POST请求

  在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交。表单提交到服务器一般都使用 GET/POST 请求。

1、获取GET请求内容

  由于GET请求直接被嵌入在路径中,URL是完整的请求路径,包括了?后面的部分,因此你可以手动解析后面的内容作为GET请求的参数。node.js 中 url 模块中的 parse 函数提供了这个功能。

var http = require('http');
var url = require('url');
var util = require('util');http.createServer(function(req, res){res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});res.end(util.inspect(url.parse(req.url, true)));
}).listen(3000);

  我们可以使用 url.parse 方法来解析 URL 中的参数

var http = require('http');
var url = require('url');
var util = require('util');http.createServer(function(req, res){res.writeHead(200, {'Content-Type': 'text/plain'});// 解析 url 参数var params = url.parse(req.url, true).query;res.write("网站名:" + params.name);res.write("\n");res.write("网站 URL:" + params.url);res.end();}).listen(3000);

2、获取 POST 请求内容

  POST 请求的内容全部的都在请求体中,http.ServerRequest 并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作。比如上传文件,而很多时候我们可能并不需要理会请求体的内容,恶意的POST请求会大大消耗服务器的资源,所以 node.js 默认是不会解析请求体的,当你需要的时候,需要手动来做。

  基本语法结构说明:

var http = require('http');
var querystring = require('querystring');http.createServer(function(req, res){// 定义了一个post变量,用于暂存请求体的信息var post = '';     // 通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中req.on('data', function(chunk){    post += chunk;});// 在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。req.on('end', function(){    post = querystring.parse(post);res.end(util.inspect(post));});
}).listen(3000);

  以下实例表单通过 POST 提交并输出数据

var http = require('http');
var querystring = require('querystring');var postHTML = '<html><head><meta charset="utf-8"><title>Node.js 实例</title></head>' +'<body>' +'<form method="post">' +'网站名: <input name="name"><br>' +'网站 URL: <input name="url"><br>' +'<input type="submit">' +'</form>' +'</body></html>';http.createServer(function (req, res) {var body = "";req.on('data', function (chunk) {body += chunk;});req.on('end', function () {// 解析参数body = querystring.parse(body);// 设置响应头部信息及编码res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});if(body.name && body.url) { // 输出提交的数据res.write("网站名:" + body.name);res.write("<br>");res.write("网站 URL:" + body.url);} else {  // 输出表单
        res.write(postHTML);}res.end();});
}).listen(3000);

二、全局对象

  JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。

  在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性。在 Node.js 我们可以直接访问到 global 的属性,而不需要在应用中包含它。

  全局对象与全局变量:

  global 最根本的作用是作为全局变量的宿主。按照 ECMAScript 的定义,满足以下条件的变量是全局变量:

  • 在最外层定义的变量;
  • 全局对象的属性;
  • 隐式定义的变量(未定义直接赋值的变量)。

  当你定义一个全局变量时,这个变量同时也会成为全局对象的属性,反之亦然。需要注意的是,在 Node.js 中你不可能在最外层定义变量,因为所有用户代码都是属于当前模块的, 而模块本身不是最外层上下文。

  注意: 永远使用 var 定义变量以避免引入全局变量,因为全局变量会污染 命名空间,提高代码的耦合风险。

1、__filename 表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径,且和命令行参数所指定的文件名不一定相同。 如果在模块中,返回的值是模块文件的路径。

// 输出全局变量 __filename 的值
console.log( __filename );//执行 main.js 文件,代码如下所示:
$ node main.js
/web/com/nodejs/main.js

2、__dirname 表示当前执行脚本所在的目录。即上例的话,知道nodejs目录

3、setTimeout(cb, ms) 全局函数在指定的毫秒(ms)数后执行指定函数(cb)。:setTimeout() 只执行一次指定函数。返回一个代表定时器的句柄值。

clearTimeout( t ) 全局函数用于停止一个之前通过 setTimeout() 创建的定时器。 参数 t 是通过 setTimeout() 函数创建的定时器。

4、setInterval(cb, ms) 全局函数在指定的毫秒(ms)数后执行指定函数(cb)。返回一个代表定时器的句柄值。可以使用 clearInterval(t) 函数来清除定时器。

setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。

5、console 用于提供控制台标准输出,它是由 Internet Explorer 的 JScript 引擎提供的调试工具,后来逐渐成为浏览器的实施标准。Node.js 沿用了这个标准,提供与习惯行为一致的 console 对象,用于向标准输出流(stdout)或标准错误流(stderr)输出字符。

console.time(label):输出时间,表示计时开始。

console.timeEnd(label):结束时间,表示计时结束。

console.trace(message[, ...]):当前执行的代码在堆栈中的调用路径,这个测试函数运行很有帮助,只要给想测试的函数里面加入 console.trace 就行了。调试作用

6、process 是一个全局变量,即 global 对象的属性。

  它用于描述当前Node.js 进程状态的对象,提供了一个与操作系统的简单接口。通常在你写本地命令行程序的时候,少不了要 和它打交道。

三、工具模块

  在 Node.js 模块库中有很多好用的模块。

OS 模块提供基本的系统操作函数。提供了一些基本的系统操作函数。我们可以通过以下方式引入该模块:var os = require("os")

Path 模块提供了处理和转换文件路径的工具。path 模块提供了一些用于处理文件路径的小工具

Net 模块用于底层的网络通信。提供了服务端和客户端的的操作。提供了一些用于底层的网络通信的小工具,包含了创建服务器/客户端的方法

DNS 模块用于解析域名。

Domain 模块简化异步代码的异常处理,可以捕捉处理try catch无法捕捉的异常。

  domain模块,把处理多个不同的IO的操作作为一个组。注册事件和回调到domain,当发生一个错误事件或抛出一个错误时,domain对象会被通知,不会丢失上下文环境,也不导致程序错误立即退出,与process.on('uncaughtException')不同。

Domain 模块可分为隐式绑定和显式绑定:

  • 隐式绑定: 把在domain上下文中定义的变量,自动绑定到domain对象
  • 显式绑定: 把不是在domain上下文中定义的变量,以代码的方式绑定到domain对象

Node.js:get/post请求、全局对象、工具模块相关推荐

  1. Node.js跨域请求解决方案

    Node.js跨域请求解决方案 一.缘由: 初到公司,老大让去解决之前项目客户提出的一个小问题,对某一模块进行访问验证,之前的项目是PHP做的,对此不了解,因此不打算先学习PHP再去解决问题,考虑到客 ...

  2. 关于Node.js的httpClieint请求报错ECONNRESET的原因和解决措施

    原文: 关于Node.js的httpClieint请求报错ECONNRESET的原因和解决措施 自己的一点理解: 1: Node.js提供的HttpServer默认设置了超时时间为2分钟,当一个请求的 ...

  3. Node.js笔记:SerialPort(串口)模块使用(基于9.x.x)

    文章目录 目的 模块安装 基础使用 扫描端口 打开端口 发送数据 接收数据 错误处理 数据解析器 SerialPort类 构造方法 属性 事件 方法 命令行工具 总结 目的 上位机与各种电路模块间常常 ...

  4. node.js request get 请求怎么拿到返回的数据_使用JS和NodeJS爬取Web内容

    作者 | Shenesh Perera译者 | 王强策划 | 李俊辰这些年来 Javascript 进步飞快,又引入了称为 NodeJS 的运行时,所以已经成为了最流行和使用最广泛的语言之一.不管你要 ...

  5. js 获取当前环境全局对象

    CSDN 中文章不一定能及时更新,欢迎点击前往我的博客查看最新版本:许盛的博客 今天读 qiankun 的源码,看到了一段看不懂的代码 Function('return this')(),研究了一下原 ...

  6. Node.js发送HTTP请求

    在Node.js中发送HTTP请求,用的比较多的是request组件,该组件的功能非常强大,但是该组件需要通过回调函数的方式获取操作的结果. 由于现在Node.js对ES6已经支持的比较好了,我们更希 ...

  7. Node.js 做一个抢票小工具!

    今天带领大家一起用Node.js 实现抢票小工具&短信通知提醒 作者:西岚 https://mp.weixin.qq.com/s/AqQgDB-0dUp2ScLkqxvLZg 获取接口信息 查 ...

  8. 安装js包管理工具(node.js、yarm)及代码编辑工具(vs code)

    学习vue等前端开发需要安装node.js.它是js包的管理工具,个人理解相当于java的maven. 在开发之前需要安装node.js和yarm.关于什么npm和yarn之间的区别,请网上找资料.有 ...

  9. 基于Node.js的微信跳一跳辅助工具

    项目地址:https://github.com/sbfkcel/WechatJumpGameHelper 这是一个需要手动来玩的辅脚本,也是最为保险,官方无法禁封的辅助工具: 支持Mac OS.win ...

  10. [Node.js]get/post请求

    摘要 在很多情况下,我们的web服务器都需要接受客户端浏览器传递的参数或者数据.最常见的是get和post请求. 获取get请求的内容 get请求传递的参数在url中,参数部分在?后面.因此可以手动解 ...

最新文章

  1. Struts2 的stream result用法
  2. Windows 8.1 Preview(Windows Blue)预览版简体中文官方下载(ISO完整版镜像)
  3. 大规模神经网络的训练优化入门
  4. 相关分析在微生物生态学中的应用与误用
  5. netstat -ano
  6. noip 2017棋盘
  7. 转:C# 线程同步技术 Monitor 和Lock
  8. 【高并发】面试官:讲讲高并发场景下如何优化加锁方式?
  9. 罗彻斯特大学计算机科学系专业排名,罗切斯特大学计算机专业怎么样?
  10. JavaScript学习(七十六)—this的指向问题
  11. maven打jar包 没有主属性清单
  12. iOS设备的越狱方法
  13. Android平板/手机,使用qq视频通话图像旋转90度
  14. 美通企业日报 | 无锡国际生命科学创新园开园;本特勒与恒大汽车博世实现合作...
  15. 数据库如何修改编码格式?
  16. AJAX基础电子教程
  17. 宝宝头上有一圈不长头发
  18. Broadcast 广播-(18)
  19. 2021年中国二次元手游市场现状分析,米哈游《原神》引爆全球手游市场「图」
  20. Oracle平台应用数据库系统的设计与开发

热门文章

  1. Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
  2. 【Android View事件分发机制】关于拦截事件的注意点
  3. history linux 日志服务器_Linux日志分析
  4. codeforces626F
  5. 同步和异步的区别和联系以及一般在什么情况下使用它们
  6. vs2017的一件奇葩事
  7. 深入理解java虚拟机(7)---线程安全  锁优化
  8. 【读书笔记】iOS-ARC-不要向已经释放的对象发送消息
  9. .net数据根据字段进行分类(linq语句)
  10. poj 1085 Triangle War 博弈论+记忆化搜索