先说一下端口:比如一台电脑上可以部署多个服务器,通过本地回环地址(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传值是通过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') })