GET/POST请求
PET请求
获取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(8888)
console.log("服务器已启动...访问:http://127.0.0.1:8888")
解析:util是node.js的常用工具模块。util.inspect()是一个将任意对象转换为字符串的方法,通常用于调试和错误输出。
POST请求
获取POST请求内容
POST请求的内容全部的都在请求体中,http.ServerRequest 并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作。
比如上传文件,而很多时候我们可能并不需要理会请求体的内容,恶意的POST请求会大大消耗服务器的资源,所以node,js,默认是不会解析请求体的,当你需要的时候,需要手动来做。
实例如下:
const http = require('http')
const querystring = require('querystring')
// 表单页面内容
var postHTML = `
<html>
<head><meta charset='utf=8'><title>node.js案例</title></head>
<body>
<form method='post'>
姓名:<input name='name'><br>
班级:<input name='class'><br>
<input type='submit'>
</form>
</body>
</html>
`
http.createServer(function(req, res) {
//定义了一个body变量,用于暂存请求体的信息
var body = ''
//通过req的data事件监听函数,每当接受到请求体的数据,就累加到body变量中
req.on("data", function(turck) {
body += turck
})
//在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回
req.on("end", function() {
body = querystring.parse(body)
//设置响应头部信息及编码
res.writeHead(200, { "Content-Type": "text/html;charset=utf-8" })
if (body.name && body.class) {
//接收到POST数据,输出提交的数据
res.write(`姓名:${body.name}`)
res.write("<br>")
res.write(`班级:${body.class}`)
} else {
//未接收到POST数据,输出表单
res.write(postHTML)
}
res.end()
})
}).listen(8888)
console.log("服务器已启动...访问:http://127.0.0.1:8888")
Web模块
什么是Web服务器?
Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序。
Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL,与客户端的网络浏览器配合。
大多数Web服务器都支持服务端的脚本语言(Java、C#、php、python)等,并通过脚本语言从数据库获取数据,将结果返回给客户端浏览器
目前最主流的三个Web服务器是Apache、Nginx、IlS。
Web应用架构
client - 客户端,一般指浏览器,浏览器可以通过HTTP协议向服务器请求数据。
Server -服务端,一般指Web服务器,可以接收客户端请求,并向客户端发送响应数据。
Business - 业务层,通过Web服务器处理应用程序,如与数据库交互,逻辑运算,调用外部程序等。
Data -数据层,一般由数据库组成。
使用Node创建Web服务器
以下是演示一个最基本的HTTP服务器架构(使用8888端口),创建server.js文件,代码如下所示:
const http = require('http')
const url = require('url')
const fs = require('fs')
// 创建服务器
http.createServer(function(request, response) {
//解析请求,包括文件名
let pathname = url.parse(request.url).pathname
// //默认首页
if (!pathname || pathname == '/') {
pathname = '/index.html'
}
//从文件系统中读取请求的文件内容
fs.readFile(pathname.substr(1), function(err, data) {
if (err) {
response.writeHead(404, { "Content-Type": "text/html" })
} else {
response.writeHead(200, { "Content-Type": "text/html" })
// 响应文件内容
response.write(data.toString())
}
// 发送响应数据
response.end()
})
}).listen(8888)
接下来我们在该目录下创建一个index.html文件,代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h3>你好</h3>
</body>
</html>
使用Node创建Web客户端
使用node创建web客户端需要引入http模块,创建client.js文件,代码如下所示:
const http = require('http')
// 用于请求的选项
let options = {
host: 'localhost',
port: 8888,
path: "/index.html"
}
// 处理相应的回调函数
function callback(res) {
// 不断更新数据
var body = ''
res.on('data', function(truck) {
body += truck
})
res.on('end', function() {
// 数据接收完成
console.log(boddy)
})
}
// 向服务端发起请求
var req = http.request(options, callback)
req.end()
NPM使用介绍
什么是 NPM?
NPM是随同Node|S一起安装的包管理工具,能解决Node]S代码部署上的很多问题,常见的使用场景有以下几种:
允许用户从 NPM服务器下载别人编写的第三方包到本地使用。
允许用户从 NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。由于新版的NodeJS 已经集成了npm,所以之前npm 也一并安装好了。
如果你安装的是旧版本的npm,可以很容易的通过npm命令来升级,命令如下:
$ npm install npm -g
安装模块
npm安装Node.js模块语法格式如下:
$ npm insta17 <Modu1e Name>
以下实例,我们使用npm命令安装常用的Node.js web框架模块express:
$ npm insta17 express
安装好之后,express 包就放在了工程目录下的node_modules目录中,因此在代码中只需要通过 require('express')的方式就好,无需指定第三方包路径。
var express = require('express');
以上命令默认下载最新版模块,如果想要下载指定版本的话,可以在模块名后边加上@<version>,例如通过以下命令可下载4.17.1版的express:
$ npm install express@4.17.1
注意:当我们通过npm安装模块的时候,有时候模块和当前webpack版本有冲突,就需要安装指定版本的模块。
通过以下命令,可以查看express模块的所有版本:
$npm view express versions
全局安装与本地安装
npm的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如:
$ npm insta17 express #本地安装
$ npm insta17 express -g #全局安装
如果出现以下错误:
npm err! Error : connect ECONNREFUSED 127.0.0.1:8087
解决办法为:
$ npm config set proxy null
本地安装
安装包存放在./node_modules下(运行npm命令时所在的目录)。如果没有node_modules目录,会在当前执行npm 命令的目录下生成node_modules目录。
·可以通过require()来引入本地安装的包。
全局安装
安装包存放在node的安装目录下。
可以直接在命令行里使用。
注意:如果你希望具备两者功能,则需要在两个地方安装它或使用npm link