用nodejs搭建怎样搭HTTP服务,过程是怎样
导读:关于“用nodejs搭建怎样搭HTTP服务,过程是怎样”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“用nodejs...
关于“用nodejs搭建怎样搭HTTP服务,过程是怎样”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“用nodejs搭建怎样搭HTTP服务,过程是怎样”吧。本文只使用nodejs的http模块搭建一个简单的http服务。
主要实现功能:
- 响应客户端的请求。
- 处理不同的请求地址并返回信息。
- 获取客户端传递的请求体参数(json字符串)和查询字符串参数。
- 服务端设置cookie和读取客户端发送的cookie。
先搭建一个简单的http服务
主要使用http模块的createserver方法和listen方法。
代码如下:
const http = require('http');
// 初始化http服务
const server = http.createserver();
// 启动 http 服务监听连接
server.listen(8000, () =>
{
console.log('service run: http://127.0.0.1:8000');
}
);
// 侦听请求事件
server.on('request', (req, res) =>
{
try {
// 设置响应头允许跨域
res.setheader('access-control-allow-origin', '*');
res.statuscode = 200;
res.setheader('content-type', 'text/plain');
res.end('http服务搭建成功');
}
catch (ex) {
console.error(ex.message);
res.statuscode = 500;
res.end('service error');
}
}
);
如上代码所示一个简单的http服务就搭好了,但是现在还只能返回一些简单的信息到客户端,而且也没有根据请求地址和请求参数做不同的处理。 那么接下来我们就先来处理请求地址的问题。
根据不同的请求地址返回不同的信息
每当收到新的请求时,request事件会被调用,传给request事件的回调函数可以接受两个对象:一个request对象,提供了请求的详细信息。一个response对象,用于设置返回给客户端的信息。 我们可以从request对象的url属性中获取请求地址,代码如下:
const http = require('http');
const server = http.createserver();
server.listen(8000, () =>
{
console.log('service run: http://127.0.0.1:8000');
}
);
server.on('request', (req, res) =>
{
try {
res.setheader('access-control-allow-origin', '*');
res.setheader('content-type', 'application/json');
// 获取请求地址
const urls = req.url.split('?');
const requestaddress = urls[0];
console.log(`请求地址:${
requestaddress }
`);
const callback = {
'/test': () =>
{
res.statuscode = 200;
res.end(json.stringify({
text: '通过测试'}
));
}
,
'/': () =>
{
res.statuscode = 200;
res.end(json.stringify({
text: 'hello world'}
));
}
}
if (callback[requestaddress] instanceof function) {
return callback[requestaddress]()
}
res.writehead(200, '响应成功');
res.end('成功收到请求');
}
catch (ex) {
console.error(ex.message);
res.statuscode = 500;
res.end('service error');
}
}
);
如上代码实现了不同请求地址返回不同信息的功能,但是也还存在一些问题。例如:没有实现获取请求体参数和查询字符串。
那么我们接下来就来添加获取请求参数的代码。
获取请求参数
查询字符串可以从request对象的url属性中获取,请求体参数可以通过侦听request对象的data事件获取。如下所示:
const http = require('http');
const server = http.createserver();
server.listen(8000, () =>
{
console.log('service run: http://127.0.0.1:8000');
}
);
server.on('request', (req, res) =>
{
try {
res.setheader('access-control-allow-origin', '*');
res.setheader('content-type', 'application/json');
const urls = req.url.split('?');
const requestaddress = urls[0];
console.log(`请求地址:${
requestaddress }
`);
const callback = {
'/test': () =>
{
console.log(`查询字符串:${
urls[1]}
`);
if (req.method === 'post') {
// post请求,获取json格式的请求体参数
let data = '';
// req对象是一个流(参考stream api),可以监听它的data事件来获取数据块。
req.on('data', (chunk) =>
{
// 这里假设收到的数据是字符串,隐式转换:二进制数据 =>
字符串
data += chunk;
}
);
// 在获取数据结束时,调用end事件
req.on('end', () =>
{
data = json.parse(data);
console.log('请求体:', data);
}
);
}
res.statuscode = 200;
res.end(json.stringify({
text: '通过测试'}
));
}
,
'/': () =>
{
console.log(`查询字符串:${
urls[1]}
`);
res.statuscode = 200;
res.end(json.stringify({
text: 'hello world'}
));
}
}
if (callback[requestaddress] instanceof function) {
return callback[requestaddress]()
}
res.writehead(200, '响应成功');
res.end('成功收到请求');
}
catch (ex) {
console.error(ex.message);
res.statuscode = 500;
res.end('service error');
}
}
);
通过以上代码我们就实现了获取请求体里的json格式数据和查询字符串数据参数。
实现服务端设置(跨域)cookie和读取客户端发送的cookie
服务器要允许跨域带凭据的请求,需要设置响应头access-control-allow-credentials为true,且响应头access-control-allow-origin的值不能为‘*’,必须为一个具体的域名。
前端要允许跨域发送凭据到服务器,则需要设置xmlhttprequest对象的withcredentials属性,将其值修改为true即可。
const http = require('http');
const server = http.createserver();
server.listen(8000, () =>
{
console.log('service run: http://127.0.0.1:8000');
}
);
server.on('request', (req, res) =>
{
try {
// 跨域允许携带凭据(cookie之类)
res.setheader('access-control-allow-credentials', 'true');
// 要允许跨域携带cookie,必须设置为具体的域,不能是‘*'
res.setheader('access-control-allow-origin', 'http://127.0.0.1:5500');
res.setheader('content-type', 'application/json');
const requestaddress = req.url.split('?')[0];
const callback = {
'/login': () =>
{
// 设置cookie
res.setheader('set-cookie', 'name=wst;
age=24;
max-age=666;
');
res.statuscode = 200;
// 返回json格式数据到客户端
res.end(json.stringify({
text: '登录成功'}
));
}
,
'/': () =>
{
// 通过req.headers.cookie读取cookie
console.log(req.headers.cookie)
res.statuscode = 200;
res.end(json.stringify({
text: 'hello world'}
));
}
}
if (callback[requestaddress] instanceof function) {
return callback[requestaddress]()
}
res.writehead(200, '响应成功');
res.end('成功收到请求');
}
catch (ex) {
console.error(ex.message);
res.statuscode = 500;
res.end('service error');
}
}
);
感谢各位的阅读,以上就是“用nodejs搭建怎样搭HTTP服务,过程是怎样”的内容了,通过以上内容的阐述,相信大家对用nodejs搭建怎样搭HTTP服务,过程是怎样已经有了进一步的了解,如果想要了解更多相关的内容,欢迎关注网络,网络将为大家推送更多相关知识点的文章。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 用nodejs搭建怎样搭HTTP服务,过程是怎样
本文地址: https://pptw.com/jishu/654500.html
