利用node.js在本地搭建简易http服务器
一、代码
创建一个server.js
文件,写入以下代码:
const http = require('http')
const server = http.createServer()
server.on('request', (req,res) => {//req.url客户端请求的url地址//req.method客户端请求的method类型/* const yoururl = req.urlconst yourmethod = req.methodconst str = `your url is ${yoururl},your request is ${yourmethod}`console.log(str); */console.log(req);const yoururl=req.urllet content='<h1>404 Not Found</h1>'if(yoururl==='/'||yoururl==='/index.html'){content='<h1>首页</h1>'}else if(yoururl==='/about.html'){content='<h1>关于页面</h1>'}res.setHeader('Content-Type','text/html;charset=utf-8')res.end(content)})
server.listen(80, () => {console.log('running on http://127.0.0.1')})
这就包含了搭建一个本地的简易服务器所需要的代码
二、详解
1.前置准备
//获取http模块
const http = require('http')
//利用http创建服务器对象
const server = http.createServer()
2.监听客户端
//绑定request事件,监听客户端请求
server.on('request',(req,res)=>{})
//req:请求对象
//res:响应对象
//调用server.listen(端口号,回调)
server.listener(80,()=>{
console.log(`http server running at http://127.0.0.1:80`)
})
3. 请求头与响应头设置
res.setHeader('Content-Type', 'text/html; charset=utf-8')
这行代码设置了响应头,其中:
Content-Type
:告诉浏览器返回的内容类型text/html
:表示返回HTML文档charset=utf-8
:指定字符编码为UTF-8,该编码包含了完整中文编码
这里的响应头设置是为了防止输入的中文变为乱码
常见的Content-Type还有:
application/json
:JSON数据text/plain
:纯文本image/png
:PNG图片
4. 端口号
server.listen(80, ...)
端口号就像是服务器的"门牌号":
80
:HTTP默认端口,访问时可不写443
:HTTPS默认端口8080
/3000
:常用开发端口
如果80端口被占用,可以改用其他端口如8080,访问地址变为http://127.0.0.1:8080
5. 本地地址127.0.0.1
127.0.0.1
是特殊的IPv4地址,称为:
- 本地回环地址(Loopback Address)
- 永远指向当前计算机
- 等价于
localhost
6. req请求对象
当收到请求时,我们可以通过req对象获取:
{url: '/about.html', // 请求路径method: 'GET', // 请求方法headers: { // 请求头'user-agent': '...','accept': '...'},// 其他属性和方法...
}
若我们需要发送请求的地址,可以直接调用req.url
通过req的这些属性,我们可以根据不同的url响应不同的页面
7. res响应对象
用于向客户端返回数据:
res.statusCode = 200 // 设置状态码
res.setHeader(name, value) // 设置响应头
res.write(data) // 写入响应体
res.end() // 结束响应
四、启动和使用服务器
- 保存代码为
server.js
- 在终端运行:
node server.js
- 浏览器访问:
http://localhost
(首页)http://localhost/about.html
(关于页)
五、常见问题解决
-
端口占用错误:
- 解决方案:改用其他端口如8080
- 修改代码:
server.listen(8080)
- 检查终端:可能已经在运行
-
中文乱码:
确保设置了正确的编码:res.setHeader('Content-Type', 'text/html; charset=utf-8')
建立好简易服务器后,就可以根据自己需求修改代码了