1.简单的服务器创建
// 1. 引入http模块
const http = require('http');
// 2. 创建服务
const server = http.createServer(function(req, res) {
console.log('有人来访问了')
//设置响应头,content-type用来告诉对方本次传输的数据的类型是什么。
res.setHeader('content-type','text/html;charset=utf8')
//res.end()结束请求,格式只能是buffer或者是String
res.end('hello world');
});
//启动服务server.listen(端口号,[回调函数])
server.listen(8081, function() {
console.log('服务器启动成功,请在http://localhost:8081中访问....');
});
http为核心模块
cmd切换到该目录下,并执行:node 文件名.js
连接自己的服务器localhost:端口号 或IP地址:端口号
连接到别人的服务器要在同一局域网下 IP地址:端口号
常用方法及属性:
response.setHeader() 设置响应头来告诉服务器本次返回的数据是什么类型的
response.end() 使 Web 服务器停止并返回当前结果
response.statueCode 用于指定状态码
request.url 获取本次请求的路径 路径+查询字符串,如果没有的话为 '/'
2.写一个处理请求
-
在请求头中设置content-type来告诉服务器,本次请求携带的数据是什么类型的
-
在响应头中设置content-type来告诉服务器,本次返回的数据是什么类型的
常见的几种文件类型及content-type
-
.html:
res.setHeader('content-type', 'text/html;charset=utf8')
-
.css:
res.setHeader('content-type', 'text/css;charset=utf8')
-
.js:
res.setHeader('content-type', 'application/javascript;charset=utf8')
-
.png:
res.setHeader('content-type', 'image/png')
-
json数据:
res.setHeader('content-type', 'application/json;charset=utf-8')
目录如下:
|-public
|-public/index.html
|-public/stye.css
|-public/1.png
|-server.js
// 当收到用户的请求之后
// 在public下去读这个文件
// 读到:返回
// 读不到:返回404
const http = require('http')
const path = require('path')
const fs = require('fs')
// 放一个对象,其中保存所有的 后缀名与content-type的一一对应关系
const mapExtToContentType = {
'.html': 'text/html;charset=utf8',
'.jpg': 'image/jpg',
'.css': 'text/css;charset=utf8',
'.js': 'application/javascript',
'.ico': 'image/ico'
}
const server = http.createServer((req, res) => {
//获取请求地址:路径+查询字符串
const url = req.url
// 获取后缀名
const ext = path.extname(url)
console.log(url, ext)
// 1. 拼接地址
const filePath = path.join(__dirname, 'public', url)
// 2. 读资源文件
fs.readFile(filePath,(err,callback)=>{
// 根据不同的后缀名,补充不同的content-type
// .html ---> text/html;charset=utf8
// .jpg ---> image/jpg
if(err) {
console.log(err)
res.statusCode = 404
res.end('404')
} else {
if(mapExtToContentType[ext]) {
//补充不同的content-type
res.setHeader('content-type', mapExtToContentType[ext])
}
res.end(content)
})
})
server.listen(8001, () => {
console.log('你的服务器在8001就绪');
})
思路:
-
把所有的静态资源(.html,.png,.css,.js)全放在一个指定的目录里;
-
用核心模块path的join方法获取文件的地址,extname获取后缀名
-
收到用户的请求之后,去指定的目录下去找对应的文件:找到文件设置响应头数据类型,没找到就改变状态码,并结束
3.写一个get类型接口
目录:
|-db
|---data.json # 数据
|-server.js # 你的代码
// server.js
const http = require('http');
const path = require('path');
const fs = require('fs');
//获取要读取文件的路径
const filePath = path.join(__dirname, 'db', 'data.json')
const app = http.createServer((req, res) => {
//通过判断输入的地址,确定是否为GET请求
if (req.url === '/getList' && req.method=== 'GET') {
//读取文件
fs.readFile(filePath, 'utf8', (err, data)=>{
//使 Web 服务器停止并返回当前结果
res.end(data)
})
} else {
res.end('error');
}
});
app.listen(8083, () => {
console.log(8083);
});
-
注意:类型
-
req.method 可以判断请求的类型
-
res.end()的参数只能是字符串(或者是buffer),而不能是对象