文章目录
Node.js的安装
了解Node.js模块系统
- 利用
Node.js
搭建一个简单的服务器,需要先了解Node.js
的模块化系统
,可以进行简单的Node.js内置模块
操作 - 点击查看
Node.js
的模块化系统
服务器的搭建
一、创建一个Web服务器
注意
- 引入
http
模块,创建http对象,监听端口 - 创建服务器成功后,每次对文件的更改都需要服务器重启,也就是重新
node + 文件名
,因此推荐使用命令行工具自动重启,安装方式npm install nodemon -g
指令nodemon + 文件名
,自动重启,ctrl + c
退出 res.end()
必须要写,后端结束响应,如果不写页面将会一直加载res.write()
返回数据,如果数据是一段文字,需要res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"})
设置响应头,数据也可以是一段html
代码- 监听的端口可以是
1~65535
,但是1024
以下一般系统占用,不推荐使用
程序代码
//1.引入http模块
const http = require("http")
//2.创建http服务对象
//http.createServer(回调函数)
const app = http.createServer((req,res)=>{
//req request 请求 res respond 响应
//后端需要设置响应头
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"})
res.write("你好!")
// res.write(`<!DOCTYPE html>
// <html lang="en">
// <head>
// <meta charset="UTF-8">
// <meta name="viewport" content="width=device-width, initial-scale=1.0">
// <title>Document</title>
// </head>
// <body>
// 你好呀!大兄弟
// </body>
// </html>`)
res.end() //后端需要结束响应 必须要写的
})
//3.监听端口
app.listen(8000)
运行
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"})
设置响应头
res.write()
可以返回html
代码
ctrl + c
退出
二、静态资源托管
静态资源
xx.css
xx.html
xx.js
xx.图片
xx.json
xx.字体
等等都属于静态资源…本文中,我们简单的用几个html
文件作为静态资源,你也可以放一些页面及更多的资源。- 前端资源请求方式
<a href=".."></a>
<img src="..."/>
location.href="..."
body{ background:url(....)}
- 后端资源读取
fs.readFile(文件名,[编码方式],回调(err,data));
注意
- 引入
http
,fs
,模块 - 字符串
index of
方法, 用于确定一个字符串在另一个字符串中第一次出现的位置,返回结果是匹配开始的位置。如果返回-1,就表示不匹配。返回-1表示不存在
try...catch 可以测试代码中的错误。try 部分包含需要运行的代码,而 catch 部分包含错误发生时运行的代码。
,在这里,使用它来让页面请求错误时跳转到事先写好的404页面
程序代码
- 同级目录下放入静态资源
req.url
,就是得到请求静态资源的地址
//资源托管
//1.引入相应的原生模块、依赖
let http = require("http")
let fs = require("fs")
//2.创建http对象(服务器对象)
let app = http.createServer((req,res)=>
//排除 /favicon.ico的请求 网页图标 自带的请求
if(req.url.indexOf("/favicon.ico") === -1){
//需要判断要读取的是动态资源(接口api)还是 静态资源
if(req.url.indexOf("/api") !== -1){ //处理接口
console.log("处理/api开头的动态接口",req.url)
}else{ //处理静态资源 /index.html
try {
//如果是 / 即直接请求localhost 相当于请求 index.html 默认是首页
//如果不是 得到 req.url 返回请求的 页面
let path = req.url === "/" ? "/index.html" : req.url;
let html = fs.readFileSync("./www"+path)
//直接将html结果返回给浏览器
res.write(html)
} catch (error) {
//如果请求页面 出错 即页面不存在 就跳转到 404 页面
let html = fs.readFileSync("./www/nopage.html")
res.write(html)
}
}
}
res.end() //必须写
})
//监听服务器
app.listen(8000)
运行
- 默认是首页
- 请求某个页面
- 如果请求地址错误,跳转到事先准备好的404错误页面
三、简单接口的实现(简单服务器搭建完成)
注意
-
引入
http
,fs
,url
,querystring
内置模块 -
处理地址栏数据,例如
get
,请求req.url
抓取 get请求的数据urlObj = url.parse(req.url,true)
将数据转化为对象urlObj.query
得到传递的数据
-
处理非地址栏数据,例如
post
,请求req.on('data',(chunk)=>{CHUNK==每次收到的数据buffer}
每次在数据池中抓取一小片数据,知道数据被抓取完req.on('end',()=>{ 接收完毕 切字符 querystring })
当数据抓取完,接收完毕后,得到数据- 将数据转化为对象
querystring.parse(data)
程序代码
//1.引入相应的原生模块、依赖
let http = require("http")
let fs = require("fs")
let url = require("url")
let querystring = require("querystring")
//2.实例化http对象(服务器对象)
let app = http.createServer((req,res)=>{
//排除 /favicon.ico的请求
if(req.url.indexOf("/favicon.ico") === -1){
//需要判断要读取的是动态资源(接口api)还是静态资源
if(req.url.indexOf("/api") !== -1){ //处理接口
//处理地址栏的数据
let urlObj = url.parse(req.url,true)
console.log(urlObj.query)
//非地址栏的数据
let noAddressData = "" //存放非地址栏的数据
req.on("data",chunk=>{ //chunk代表抓取的一片数据,data事件内部会频繁的触发
noAddressData += chunk
})
req.on("end",()=>{ //数据已经全部接受完毕
console.log("非地址栏的数据:",querystring.parse(noAddressData))
})
}else{
//处理静态资源的代码
try {
let path = req.url === "/" ? "/index.html" : req.url;
let html = fs.readFileSync("./www"+path)
//直接将html结果返回给浏览器
res.write(html)
} catch (error) {
let html = fs.readFileSync("./www/nopage.html")
res.write(html)
}
}
}
res.end() //必须写
})
//监听服务器
app.listen(8000)
运行
postman 测试接口软件
- 在网上搜索下载安装
- 点击进入官网
- 利用
postman
测试接口 - 配置通过地址栏传递的数据
- 非地址栏传递的数据
- 点击
send
发送请求
- 得到传递的数据