# server **Repository Path**: browniu/server ## Basic Information - **Project Name**: server - **Description**: node.js 服务端 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-03-10 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 读写文件 ### 读取 ```JavaScript let fs = require('fs') fs.readFile('temp.md', (err, data) => { console.log(data.toString()) }) ``` ### 写入 ```JavaScript fs.writeFile('testNew.txt', 'hehe', (err) => { if (err) console.error(err) // read('testNew.txt') }) ``` ## 创建`http`服务 ```JavaScript let http = require('http') // 创建服务器 let server = http.createServer() //处理请求事件 server.on('request', () => { console.log('--收到客户端发起的请求', new Date()) }) // 启动服务器,监听端口 server.listen(2333, () => { console.log('服务器已启动:http://127.0.0.1:2333/') }) ``` ## 响应请求 ```JavaScript request() { // 处理请求 this.server.on('request', (request, response) => { console.log('GET | ', new Date('2019/03/09 00:00:00')) console.log('PATH:', request.url) // 获取URL参数 if (request.url.match(/\?/)) { console.log('DATA: ', request.url.split('?')[1]) this.value = request.url.split('?')[1] } response.write(this.template(request.url.split('?')[1])) response.end() }) } ``` ## 允许跨域 ```JavaScript // 处理跨域 response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Headers", "X-Requested-With"); response.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); response.setHeader("X-Powered-By", ' 3.2.1'); response.setHeader("Content-Type", "text/html"); ``` ## 模块 ### 核心模块 可以直接`require()`的模块 - `fs` 文件操作 - `http` 服务器构建 - `path` 路径操作 - `os` 操作系统 ### 自定义模块 ```JavaScript require('./plugin') ``` ### 模块作用域 没有全局作用域,只有模块作用域 ### 模块通信 ```JavaScript //输入 let pluginData = require('./plugin.js') //输出 exports.pluginData = {'xixi'} ``` ## IP 和端口 IP 用来定位计算机,端口进一步定位该计算机内的程序 ## 编码方式 ```JavaScript response.setHeader("Content-Type", "text/html; charset=utf-8"); ``` ## 返回页面 ```JavaScript request(){ //... this.readTemp('index.html', response) //... } readTemp(e, response) { this.fs.readFile('source/' + e, (err, data) => { response.end(data.toString()) }) } ``` ## 资源类型 [类型查询](http://tool.oschina.net/commons) ## `POST` 请求跨域 ```JavaScript response.setHeader("Access-Control-Allow-Headers", "Origin,No-Cache,X-Requested-With,If-Modified-Since,Pragma,Last-Modified,Cache-Control,Expires,Content-Type,Access-Control-Allow-Credentials"); ``` ## `url`模块获取参数 ```JavaScript this.url = require('url') console.log(this.url.parse(request.url, true).pathname) console.log(this.url.parse(request.url, true).query) ``` ## 处理 POST 请求 ```JavaScript subItem(req, res) { let data = '' req.on('data', (chunk) => { data += chunk }) req.on('end', () => { if (data) { this.addItem(JSON.parse(data)) } res.end('请求提交数据接口成功,' + data) }) } ``` ## 服务端渲染&客户端渲染 - 客户端渲染可以实现局部刷新 - 客户端渲染可以减轻服务端压力 - 服务端渲染有利于 SEO