1.get参数处理
我会在代码中进行注解,那么直接来看看代码
const url = require('url');
// root:123456表示在有一些服务器访问的时候需要账号和密码, : 前面的就是账号, : 后面的就是密码 (了解)
// :666表示端口号
// /user/1222312662937800/posts表示请求地址
// ?name=sandy&age=21表示参数
// #sandy表示哈希值
let str = 'https://root:123456@juejin.cn:666/user/1222312662937800/posts?name=sandy&age=21#sandy'
// 首先先要把str转为对象来打印一下
let obj = url.parse(str);
console.log(obj);
想拿参数是不是就拿到对象里的里的query就可以了,但是这里面是不是有个&,这个怎么解决
可以在字符串转对象的时候,url.parse还可以再传一个参数,传一个true,它就会把这个query转为对象
const url = require('url');
let str = 'https://root:123456@juejin.cn:666/user/1222312662937800/posts?name=sandy&age=21#sandy';
let obj = url.parse(str, true);
console.log(obj);
这样是不是就方便是不是就可以通过
obj.query.name
obj.query.age
拿到我们想要的参数了
来打印试一下
const url = require('url');
let str = 'https://root:123456@juejin.cn:666/user/1222312662937800/posts?name=sandy&age=21#sandy';
let obj = url.parse(str, true);
console.log(obj.query.name);
console.log(obj.query.age);
那是不是就拿到了我们想要的参数了
那下面在本地搭建的服务区来试一下
const url = require('url');
const http = require('http');
let server = http.createServer();
server.on('request', (req, res) => {
let obj = url.parse(req.url, true);
res.end(obj.query.name + '----' + obj.query.age);
}).listen(666);
2.post参数处理
在Node中,想要获取post的参数需要导入
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:666/index.html" method="post">
<label>
<input type="text" name="userName">
<input type="text" name="passWord">
<input type="submit" value="提交">
</label>
</form>
</body>
</html>
const http = require('http');
const querystring = require('querystring');
let server = http.createServer();
server.on('request', (req, res) => {
// 1.定义变量保存传递过来的参数
let params = '';
// 注意点: 在Node中,post请求的参数我们不能一次性获取完,必须分批获取
req.on('data', (data) => {
params += data;
});
req.on('end', () => {
let obj = querystring.parse(params);
console.log(obj);
})
}).listen(666);
这样是不是就可以拿到post传递的参数
为了方便观察,我再改造一下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:666/index.html" method="post">
<label>
<input type="text" name="userName">
<input type="text" name="passWord">
<input type="submit" value="提交">
</label>
</form>
</body>
</html>
const http = require('http');
const querystring = require('querystring');
let server = http.createServer();
server.on('request', (req, res) => {
// 1.定义变量保存传递过来的参数
let params = '';
// 注意点: 在Node中,post请求的参数我们不能一次性获取完,必须分批获取
req.on('data', (data) => {
params += data;
});
req.on('end', () => {
let obj = querystring.parse(params);
res.end(obj.userName + '---' + obj.passWord);
})
}).listen(666);
3.获取请求类型
通过req.method就可以获取请求类型
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:666/index.html" method="get | post">
<label>
<input type="text" name="userName">
<input type="text" name="passWord">
<input type="submit" value="提交">
</label>
</form>
</body>
</html>
const http = require('http');
let server = http.createServer();
server.on('request', (req, res) => {
console.log(req.method);
}).listen(666);
那么是不是可以判断如果是get请求,就用get方式来处理参数,如果是post就用post方式来处理参数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:666/index.html" method="get">
<label>
<input type="text" name="userName">
<input type="text" name="passWord">
<input type="submit" value="提交">
</label>
</form>
</body>
</html>
const http = require('http');
const url = require('url');
const querystring = require('querystring');
let server = http.createServer();
server.on('request', (req, res) => {
res.writeHead(200, {
"Content-Type": "text/plain; charset=utf-8"
});
if (req.method.toLowerCase() === 'get') {
let obj = url.parse(req.url, true);
res.write('通过get方法获取参数')
res.end(obj.query.userName + '----' + obj.query.passWord);
} else if (req.method.toLowerCase() === 'post') {
let params = '';
req.on('data', (data) => {
params += data;
});
req.on('end', () => {
let obj = querystring.parse(params);
res.write('通过post方法获取参数')
res.end(obj.userName + '---' + obj.passWord);
})
}
}).listen(666);