您的位置:首页 > Web前端 > Node.js

使用nodejs搭建一个简单服务器

2020-06-29 04:25 639 查看

1.nodejs 服务器搭建

nodejs 写一个服务器,别人能够访问到;

http 协议:浏览器 和 服务器 遵守的规范;

http 服务器 和 浏览器 之间的通信,都是通过 http 实现的

我们的服务器,最重要的一环,监听,也就是说,http 向服务器发送请求,那么服务器就应该接收到这样的请求,这就是监听;

  1. 第一步: 我们创建
    server.js
    文件如下:
// 1. 导入http模块
const http = require("http");

// 2. 创建一个web服务器对象
const server = http.createServer();

// 3. 监听请求事件
server.on("request", (req, res) => {
//req-->request 请求对象, res-->response 响应对象
// 通过响应头设置返回前台数据格式及编码。(解决中文乱码的问题)
res.setHeader('Content-Type', 'text/html;charset=utf-8');
//res.write()表示向客户端输出的方法
res.write("hello world,你好nodejs")
//res.end()每次响应完,需要调用此方法 来结束响束
res.end();
})

// 4. 监听端口,为了避免端口冲突,这里给一个本机端口3000
server.listen(3000, () => {
console.log("服务器启动成功");
}) 

2.第二步:启动服务器
以上就是初步创建的服务器文件,接下来让我们在server.js所在的目录下打开dos终端窗口,执行如下指令:

node server.js
  1. 第三步:访问服务器 ;
    打开任意浏览器,地址栏中输入
    http://127.0.0.1:3000
    或者
    http://localhost:3000
    便可访问服务器。

2. 服务器业务函数参数分析:

req:

req
参数指得是request 请求对象,凡是浏览器发送请求相关的信息,都可以从该对象中找到。例如:

1.

req.url
用户请求的路径
2.
req.headers
请求头

{
//请求报头域主要用于指定被请求资源的Internet主机和端口号
host: 'localhost:3000',
//Connection: keep-alive  当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
//例如: Connection: close  代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
connection: 'keep-alive',
// 这个是非常重要的规则。 这个用来指定Response-Request遵循的缓存机制。各个指令含义如下
//Cache-Control:Public   可以被任何缓存所缓存()
//Cache-Control:Private     内容只缓存到私有缓存中
//Cache-Control:no-cache  所有内容都不会被缓存
'cache-control': 'max-age=0',
'upgrade-insecure-requests': '1',
//告诉HTTP服务器,客户端使用的操作系统和浏览器的名称和版本
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
// 浏览器端可以接受的媒体类型,通配符 * 代表任意类型例如  Accept: */*  代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
//浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码);
'accept-encoding': 'gzip, deflate, br',
//浏览器申明自己接收的语言
'accept-language': 'zh-CN,zh;q=0.9'
}

1.

req.method:
请求类型 如:get 、post 等
2.
req.httpVersion:
http协议版本 ,目前我们使用的是HTTP/1.1 版本
res
res是相应对象,凡是服务器想要给前端浏览器的数据和信息。都需要res去完成。

1.

res.setHeader() //
设置响应头 ,例如 res.setHeader(‘Content-Type’, ‘2.
text/html;charset=utf-8’)
;

3.

res.wtire() //
向浏览器输出

4.

res.end() //
向浏览器 响应结束

5.

res.statusCode //
设置响应状态码

6.

res.statusMessage //
设置响应 状态信息

7.

res.writeHead() //
综合写法: 状态码,信息,响应头,如下

res.writeHead(404, 'Not Found', {
'Content-Type': 'text/plain;charset=utf8'
})

3.服务器的扩展

//加载http模块
var http=require('http');

// 加载fs模块   文件的读取,写入。。。
var fs=require('fs')

//创建服务器对象

//每当有人 访问了app,function就会执行一次。

var app=http.createServer(function(req,res){
//req 请求对象
//req.url  表示用户的请求路径。
// 请求路径1:  127.0.0.1:3000/  我们自己发送的
// 请求路径2:  127.0.0.1:3000/favicon.ico   浏览器的请求。(请求图标)
if(req.url=='/'){
fs.readFile('./index.html',function(err,data){
//data -buffer类型数据 (底层二进制数据)
if(!err){
//  console.log(data.toString());
res.write(data);
res.end();
}
});
}else if(req.url=='/favicon.ico'){
fs.readFile('./logo.png',function(err,data){
if(!err){
res.write(data);
res.end();
}
})
}
})
//监听端口
// 参数一:指定服务器运行的端口号 , 端口号有取值范围 0-65535, 0-1024系统保留端口
// 参数二:指定服务器运行的域名(ip)。本地域名:localhost, 本地ip 127.0.0.1
// 参数三:回调函数。 当node server
app.listen(3000,'127.0.0.1',function(err){
//err 错误对象, 默认值:null,
// 只有app.listen 出现错误, err={err:'xxxx'}
if(err){
throw err;
}else{
console.log('服务器运行在127.0.0.1:3000上')
}
})

静态资源服务器

1. 首先目录要安装如下结构创建
js
img
css
server.js
index.html
2. server.js代码如下:
//定义服务器的文件

var http=require('http');

var fs=require('fs');

var app=http.createServer(function(req,res){
console.log(req.url)
if(req.url=='/'){
fs.readFile('./index.html',function(err,data){
if(!err){
res.end(data);
}
})
}else if(req.url=='/favicon.ico'){
fs.readFile('./img/logo.png',function(err,data){
if(!err){
res.end(data);
}
})
}else{  //  req.url==  /css/a.css, /img/3zhe.jpg, /img/4zhe.jpng
fs.readFile('.'+req.url,function(err,data){
if(!err){
res.end(data);
}
})
}

})

app.listen(4000,'localhost',function(err){
if(!err){
console.log('您的服务器成功运行在localhost:4000上')
}
})

/*
1. 用户访问  localhost:4000/ -----> 返回 index.html

2. 浏览器自动访问  localhost:4000/favicon.ico  ----->  返回  ./img/logo.png

3. 页面中会引入 css,  localhost:4000/css/a.css  ----->  返回 ./css/a.css

4. 我们页面,不只要引入一个css,或一个js,或一个img,
我们要引入的事多个 css,js,img,总不能一个一个去判断,req.url 然后做出响应。

-------》  封装一个 能返回静态资源的通用服务器。

1. 归类所有请求可以分为 几类。  / ,  /favicon.ico  /css/a.css /img/3zhe.jpg /js/a.js

3. 初步分析,可以分为3类 :   第一类: /

第二类: /favicon.ico

第三类: /css/...,  /js/...  ,  /img/...

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: