1-了解端口
- 一台电脑可以部署多个服务器,例如:
- Apache软件部署的服务器
- 我们自己用http模块搭建的服务器
- mysql数据库服务器
- 之后我们就能通过ip地址来找到这个电脑(localhost或者127.0.0.1)
- 通过端口来找到不同的服务器
注意:
- 默认的http端口号是80端口,所有Apache配置这个web服务器同的就是80端口
- 默认的80端口可以不写
- 服务器端口不能乱写,很多端口已经被其他的服务器给占用了
2-web服务器读取网页返回给用户
//1.导入模块
const fs = require("fs")
const path = require("path")
const http = require("http")
//2.创建服务器
const server = http.createServer((requext, response) => {
//3.读文件
//3.1拼接读取文件的路径
const fullPath = path.join(__dirname, "web", "index1.html")
//3.2读取文件内容
fs.readFile(fullPath, "utf8", (err, data) => {
if (err == null) {
//读取成功后返回给用户页面
response.end(data)
} else {
response.end("404")
}
})
})
//4.开启服务器
server.listen(4399, () => {
console.log("成功")
})
3-实现静态资源服务器
//实现静态资源服务器
//要求:用户访问什么资源就返回什么资源,没有找到就返回404
//1.导入模块
const fs = require("fs")
const path = require("path")
const http = require("http")
//2.创建服务器
const server = http.createServer((request, response) => {
//3.设置返回给用户的内容
//3.1首先要知道用户请求的是哪个页面
//requext是请求,里面有你要请求的资源名字
//3.2 拼接要读取的文件的路径
const fullPath = path.join(__dirname, "web", request.url)
//3.3 读文件
fs.readFile(fullPath, (err, data) => {
if (err == null) {
response.end(data)
} else {
response.end("404")
}
})
})
//4.开启服务器
server.listen(4399, () => {
console.log("成功")
})
04-nodejs接收get或post传递的参数
/**
* 前端传参:
* get传参:拼接在url上面
* http://127.0.0.1:4399/joke?id=&&username=admin
* post传参:不是拼接在url上面
* 在请求体重传递
*/
//写一个服务器(后端接口)
//1.导入模块
const http = require("http")
const fs = require("fs")
const path = require("path")
const url = require("url")
//2.创建服务器
const server = http.createServer((req, res) => {
//req是请求的对象,req.url能拿到请求的url中?以及?后面的内容
console.log(req.url)
//可以拿到通过req.url传递的参数
//但是要做字符串的处理(不适合),可以直接用url模块来处理
//url.parse()方法接收一个字符串,解析,然后返回一个url对象
//第一个参数:要处理的url
//第二个参数:如果是true的话就返回一个对象
//这个对象中有一个query属性,他也是一个对象,这个属性里面有get传递的参数
//那就可以根据这个接收的到id,去数据库中获取这个id对应的所有信息,返回给调用者
let = urlObj = url.parse(req.url, true)
console.log(urlObj)
console.log(urlObj.query)
res.end(JSON.stringify(urlObj.query)) //只能返回字符串
})
//3.开启服务器
server.listen(4399, () => {
console.log("成功开启")
})
/**
* 前端传参:
* get传参:拼接在url上面
* http://127.0.0.1:4399/joke?id=&&username=admin
* post传参:不是拼接在url上面
* 在请求体重传递
*/
/**
* get数据是存在url中的,相对较小,req.url拿到
* post数据是存在请求体中的,相对而言较大,那传给后端的话,就不会一次全传过去,他会把数据分割成多个小块,一块一块的传
* 后端一块一块的接收
* 1.首先要有个容器
* 2.给req对象一个data事件(这个事件会执行很多次)这个事件会把小块的数据拼接起来
* 3.给req对象一个end事件(只会执行一次)表示数据传递完了
* 4.处理传递过来的数据,queryString.parse()
*/
//1.导入模块
const http = require("http")
const querystring = require("querystring")
//2.创建服务器
const server = http.createServer((req, res) => {
// console.log(req.url)
//req是请求对象
//因为这里是post方式传递的参数,不是在url中的,所有用req.url不行
//1.要有个容器
//2.给req对象一个data事件
//3.给req对象一个end事件
let postData = ""; //容器
req.on("data", (chunk) => {
postData += chunk
}) //给data事件,事件处理程序,参数是当前这次传递的一块内容
req.on("end", () => {
// console.log(postData)//username=admin&postword=123456
//解析这个传递的postData
//用queryString
let postObj = querystring.parse(postData)
console.log(postObj) //{username:'admin',postword:'123456'}
//就可以拿到处理后的数据去数据库对比
}) //表示事件处理完毕,
res.end("aaa")
})
//3.开启服务器
server.listen(4399, () => {
console.log("成功开启")
})