node服务端开发

Node.js在server服务端开发常用模块,HTTP模块处理客户端的网络请求,URL模块用于处理与解析请求的URL, Query Strings模块处理客户端通过get/post请求传递过来的参数,Path模块文件路径处理服务,stream处理body提交数据,HTTPS模块 是基于TLS/SSL的HTTP协议,File System模块服务端操作文件或图片资源等,Net模块用于创建基于流的TCP或IPC的服务器。

nodejs的真正用途

  • 运行在服务器, 作为web server
    1. 基于node.js构建全栈项目 实现web服务器和数据服务器
    2. 基于node.js构建中间层 实现中间层转发处理基础业务逻辑
    3. 基于node.js实现服务端渲染
  • 运行在本地 作为打包 构建工具

nodemon 监视文件改动,自动重启 npm i -g nodemon 启动 nodemon xx.js

创建http服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 引入核心对象http
const http = require('http')
// 创建服务
const server = http.createServer((req, res) => {
// req IncomingMessage类的实例的对象,提供当前请求的客户端信息
// res ServerResponse类的实例对象,提供响应的相关方法

// console.log( req.httpVersion ); // 查看http版本
// console.log( req.method ); // 请求方法
// console.log( req.headers ); // 请求头
// console.log( req.url ); // 请求地址

// 设置并写入头信息
// res.writeHead(状态码, 状态码描述, 头信息)
res.writeHead(200, http.STATUS_CODES[200], {
'Content-Type': 'text/html;charset=utf-8'
})

// 设置头信息
// res.setHeader(头信息名称, 值);
// res.getHeader(头信息名称); // 获取某个请求头
// res.removeHeader(头信息名称); // 删除某个请求头
// 头信息的写入与设置必须在res的write、end之前
res.setHeader('Content-Type', 'text/html;charset=utf-8')
res.end()
})
// 监听端口及主机
server.listen(4004, () => { console.log('listening on port 4004') })

server端开发注意事项

  • 服务稳定性 避免恶意攻击和误操作 服务端不能随便挂掉 PM2进程守候
  • 考虑内存和CPU(优化,扩展) 服务端承载很多请求 CPU和内存都是稀缺资源 stream写日志 使用redis存session
  • 日志记录 服务端记录日志 存储日志 分析日志
  • 安全 服务端要防止xss攻击和sql注入
  • 集群和服务拆分 服务拆分来承载大流量

处理get请求

get请求 客户端向服务器获取数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const http = require('http')
const queryString = require('querystring');
const server = http.createServer((req, res) => {
console.log('methods: ', req.method)
const url = req.url
console.log('url: ', url)
req.query = queryString.parse(url.split('?')[1])
console.log('query: ', req.query)
res.end(JSON.stringify(req.query))
})
server.listen(4004, () => {
console.log('server running on port 4004');
})
// 浏览打开 http://localhost:4004/?id=1&name=tew
// 客户端输出 输出 {"id":"1","name":"tew"}
// 服务端输出 methods: GET url: /?id=1&name=tew query: { id: '1', name: 'tew' }

处理post请求

post请求 客户端要像服务端传递数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const http = require('http')
const server = http.createServer((req, res) => {
if(req.method === 'POST'){
console.log('content-type', req.headers['content-type'])
let postData = ''
req.on('data', chunk => {
postData += chunk.toString()
})
req.on('end', () => {
console.log('postData', postData)
res.end('hello world')
})
}
})
server.listen(4004, () => {
console.log('server is running on port 4004');
})
// 使用 postman 发送post请求 并设置 content-type:application/x-www-form-urlencoded
// 发送 请求体为 {id:1, name:tew}
// 服务器端输出 content-type application/x-www-form-urlencoded postData id=1&name=tew

-------------本文结束感谢您的阅读-------------
0%