使用node搭建一个简单服务器
- 要使用node搭建一个服务器, 首先肯定是要去node官网 查看文档的,根据文档, 可以知道node有哪些功能。
- 下面是一个简单的node服务器,包含2个文件,启动的方式就是在node环境下 运行
node app.js
-
首先, 需要引入一些node模块组件
- http模块
- 文件模块 :fs
- 路径模块: path
- url模块: url
-
接下来通过
http.createServer()
方法创建一个新的服务
let server = http.createServer()
- 给server注册一个服务事件
server.on('request',(req, res) => {...})
- req和res分别是请求request和响应response
获取get请求的参数
- 通过url模块可以解析的 URL 字符串
url.parse(data, Boolean)
第一个值是url的path参数,第二个是如果设为 true,则url // 之后至下一个 / 之前的字符串会解析作为 host。 例如, //foo/bar 会解析为 {host: ‘foo’, pathname: ‘/bar’} 而不是 {pathname: ‘//foo/bar’}。 默认为 false。
var qu = url.parse(req.url, true).query //
- 接下来通过
startsWith()
方法匹配url的pathname来判断请求的哪个接口
然后就可以进行对应的接口处理了 - 下面是完整的app.js 文件和 data.json 文件
- get请求的路径是: localhost:9999/add?urlString=测试
- post请求的路径是: localhost:9999/addPost (接收json数据,可以用postman测试)
- 有兴趣的小伙伴可以试试哦
// 引入http模块
const http = require('http')
const fs = require('fs')
const path = require('path')
const url = require('url')
const querystring = require('querystring')
// 创建一个服务
let server = http.createServer()
// 运行服务器的方法
server.on('request', (req, res) => {
var resData = []
// req: 请求
// res: 返回
if (req.method == 'GET') {
// 获取get请求的参数
var qu = url.parse(req.url, true).query
// add接口操作
if (req.url.startsWith('/add')) {
// __dirname 表示当前文件路径
var dbPath = path.join(__dirname, 'data.json')
// 读取本地的json文件
fs.readFile(dbPath,'utf8', (err, data) => {
if (err) {
return console.log('读取文件失败' , err)
}
// 读取json文件 然后转码
data = JSON.parse(data)
// 将新内容添加到数组
data.push(qu.urlString)
// 重新写入文件
fs.writeFile(dbPath, JSON.stringify(data), (err, data1) => {
if (err) {
console.log('文件写入失败')
return
}
resDatas({
data: 'ok'
})
})
})
}
}
if (req.method == 'POST') {
console.log('这是POST请求!')
// 处理post请求的参数
//1. 给req对象注册一个 data事件
// data事件当post请求发送参数的时候,就会触发data事件
// data事件会触发一次或者多次 ,把每次触发data事件的数据拼起来即可
let result = ''
req.on('data', function(chunk){
console.log('触发了一个data事件')
result += chunk
})
//2. 给req注册一个end事件
// 当所有的请求参数都发送完成了, end事件就会触发
req.on('end', function(){
console.log('post请求完成了')
// 处理result这个字符串
let obj = querystring.parse(result)
console.log(obj)
})
resDatas({
data: '接收到数据了'
})
}
// 封装的返回函数
function resDatas(data) {
res.setHeader('content-type', 'json')
// 所有的请求都通过end函数将函数的参数返回给请求
// 注意 end 函数返回值只能是一个字符串。不能是复杂数据类型
res.end(JSON.stringify(data))
}
})
// 监听服务器状态
server.listen(9999, () => {
console.log('服务器启动了,访问 http://localhost:9999/')
})
["测试","测试1","测试2","新的添加","新的添加"]