Node服务器搭建
一. 静态服务器搭建
-
先说一下端口:比如一台电脑上可以部署多个服务器,通过本地回环地址(127.0.0.1/localhost)可以找到电脑,然后通过端口区分不同的服务器。
-
默认的http端口是80,Apache配置web服务器用的就是默认的80端口。默认的80端口可以省略
-
我们搭建服务器不要去占用公认端口(0~1023),用大于这个范围的端口一般没有被占用。
当然大于这个范围也有被占用的端口,例如:
3306端口:MYSQL数据库端口
5432端口:postgresql数据库端口
6379端口:Redis数据库端口
8080端口:TCP服务端默认端口
8888端口:Nginx服务器的端口
9200端口:Elasticsearch服务器端口
27017端口:mongoDB数据库默认端口
22122端口:fastdfs服务器默认端口
-
-
搭建一个简单的服务器,返回html页面
-
返回页面,请求那个页面返回那个页面
执行过程:
- 首先游览器发送请求到服务器
- 服务器从游览器的请求中获取要的是哪一个资源,然后在服务器的资源中查找有没有所要的资源
- 如果有则返回那个资源给游览器,没有则返回404页面
// 创建服务器 const sever = http.createServer((request, response)=>{ // 设置返回给用户的内容 // console.log(request); // 请求内容 // console.log(request.url); // url包含请求的资源名字 // 拼接要读取的文件路径 const filePath = path.join(__dirname,'web',request.url); })
这里的request就是请求内容,request里的url包含请求的资源名字
用request.url来拼接路径就可以得到要读取的资源路径
-
静态资源服务器完整代码:
// 导入模块 const path = require('path'); const http = require('http'); const fs = require('fs'); // 创建服务器 const sever = http.createServer((request, response)=>{ // 设置返回给用户的内容 // 1. 获取用户请求的是那个页面 const filePath = path.join(__dirname,'web',request.url); // 2.读取文件的内容 fs.readFile(filePath,(err,data)=>{ if(err == null){ response.end(data); }else{ response.end('404 not found' + err) } }) }) // 开启服务器 sever.listen(8088,()=>{ console.log('8088服务器开启了...') })
这里的fs.readFile()里不要加‘utf-8’。如果加了会导致无法识别别的类型文件
- 服务器有一个嗅探功能:会根据请求的资源名字,自动获取要请求什么类型的资源类型
-
美化404页面
-
可以准备一个404页面然后
response.end
返回 -
也可以直接用模板字符串
const path = require('path'); const http = require('http'); const fs = require('fs'); // 创建服务器 const sever = http.createServer((request, response)=>{ // 设置返回给用户的内容 // 1. 获取用户请求的是那个页面 const filePath = path.join(__dirname,'web',request.url); // 2.读取文件的内容 fs.readFile(filePath,(err,data)=>{ if(err == null){ response.end(data); }else{ response.end(` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Not Found</title> </head> <body> <h1 style="color: red;">404 Not Found</h1> <p>${err}</p> </body> </html> `) } }) }) // 开启服务器 sever.listen(8088,()=>{ console.log('8088服务器开启了...') })
-
-
服务器补充
-
页面上所有的外部资源(图片,css文件,js文件)都要向服务器发送请求来获取
-
所以为了节省加载时间,如果有多个图片最好能整合成一张精灵图
-
会自动请求一个favicon.ico,这是标签页的图标
-
后端路由:就是写接口
// 导包 const express = require('express'); const bodyParser = require('body-parser'); var multer = require('multer'); // 创建服务器 const app = express() // 用包创建一个uploads文件夹 var upload = multer({ dest: 'uploads/' }) // 转换格式 app.use(bodyParser.urlencoded({ extended: false })) // 注册接口 app.post('/register', (req, res) => { // 注册相关逻辑 res.send('测试post接口'); }) // 登录接口 app.post('/login', (req, res) => { // 注册相关逻辑 res.send('测试post接口'); }) // 获取所有英雄接口 app.get('/getAllHero', (req, res) => { // 获取所有英雄 res.send('测试post接口'); }) // 删除英雄接口 app.get('/deleteHero', (req, res) => { // 获取所有英雄 res.send('测试post接口'); }) // 开启服务器 app.listen(8080, () => { console.log('服务器已开启') })
-
二. 参数传递get和post
-
get和post的区别
- get传值是通过url传值,而post是通过请求体传递的(guerystring)
- get传递的数据相对较小,而post传递的数据相对而言比较大
- get传值由于是在url中传递的,所以安全性较低.
post传值安全性相对而言高- -点 - get-般用于请求数据/获取数据
post-般用于提交数据
-
get:数据拼接在URL上面
http://127.0.0.1:8089/?id=123456&&password=10086
-
可以用require.url拿到,但要处理字符串
// 导入模块 const http = require('http'); const url = require('url'); const sercer = http.createServer((require,Response)=>{ let urlObj = url.parse(require.url,true); Response.end(JSON.stringify(urlObj.query)); // {"id":"123456","password":"10086"} }) sercer.listen(8089,()=>{ console.log('8089服务器开启了') })
可以使用url模块调用pars方法来处理字符串
- 第一个参数: 要处理的url
- 第二个参数: 如果为true则返回一个对象
会返回一个url对象,里面有query
query: [Object: null prototype] { id: ‘123456’, password: ‘10086’ }
-
-
post:数据不是拼接在url上, 存在请求体中
-
传给后端不会一下传过去,会把数据分成很多块,一小块一小块的传
如果要接收,
- 首先要有一个容器
- 然后给require一个data事件(执行很多次),把这些小块数据拼起来
- 给require一个end事件(只执行一次),表示数据传递完了
- 处理数据 queryString.parse()
// 导入模块 const http = require('http'); const queryString = require('querystring'); // 创建服务器 const server = http.createServer((request, response) => { // 创建一个容器 let postData = ''; // 然后给require一个data事件 request.on('data',(chunk)=>{ postData += chunk }) // 给require一个end事件 request.on('end',()=>{ console.log(postData); // 用queryString.parse()处理数据 let postObj = queryString.parse(postData); console.log(postObj); }) response.end('测试') }) // 开启服务器 server.listen(8088, () => { console.log('服务器开启了:8088') })
-