IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> node搭建简单服务器 -> 正文阅读

[系统运维]node搭建简单服务器

node中提供了一些核心模块,基于这些模块可以在服务器端进行一些操作

fs模块

fs是node提供的一个核心模块,可以用来读取文件,现有一个需求,要把同目录下的test中org.txt中数据进行处理,并且在test文件夹下新建一个名为student.txt的目录来保存处理好的数据

处理前的数据
小明=100 小红=90 小刚=80 小彭=70
处理后的数据
小明:100
小红:90
小刚:80
小彭:70
// 1.创建文件方法
const fs=require('fs');
fs.readFile('./test/og.txt','utf8',function(err,data){
    // 如果读取失败直接退出函数
    if(err){
       return err; 
    }
    // 1.读取文件内容
    // 2.修改文件内容
    // replace用普通字符替换只会执行一次,用正则的全局匹配来替换
    let reg=/=/g;
    let reg2=/ /g;
    let new_data=data.replace(reg,':');
    // 再次替换空格为换行符\r\n
    let final_data=new_data.replace(reg2,'\r\n')
    //将最终处理好的字符写入到test目录下,新建一个文本保存
    fs.writeFile('./test/student.txt',final_data,'utf8',err=>{});
})

代码实现如上,下面是是几个需要注意的地方
1.读取文件内容fs.readFile
传入三个参数,第一个是读取文件的路径,第二个是设置读取的编码格式,选填,第三个是一个回调函数,有两个参数,第一个是错误对象,第二个是读取到的数据
2.写入文件内容fs.writeFile
传入四个参数,第一个是写入内容的路径,第二个是写入的内容,第三个是写入的编码格式,默认为utf8,第四个是回调函数,传一个错误对象参数
字符串的替换
字符串替换用的是replace方法,传入两个参数,第一个是要替换的内容,可以是正则也可以是一个字符串,第二个是替换为的字符,如果第一个参数用的是字符串只会执行一次替换,所以这里用的是正则的全局替换,并且replace会返回一个替换后的新字符串,原字符串不会受影响,需要用一个字符串接收

搭建一个简单的服务器

const http=require('http')
const path=require('path')
const fs=require('fs')
const url=require('url')
const template=require('art-template')
const server=http.createServer()
const arr_list=[];
server.on('request',(req,res)=>{
    // 将所有public中的文件暴露出去,给所有的路径都拼接一个public字符串
    if(url.parse(req.url,true).pathname=='/handle'){
        // res.end(url.parse(req.url,true).query)
        let str=url.parse(req.url,true).query;
        str=JSON.stringify(str);
        str=JSON.parse(str);
        // str.data='2022.2.3'
        arr_list.push(str)
        console.log(arr_list);
        // 重定向
        res.statusCode=302
        res.setHeader('Location','/');
        res.end();
        // res.end(str);
    }
    if(req.url=='/'){
        req.url='/index.html'
    }
    let req_url='public'+req.url
    fs.readFile(req_url,'utf8',function(err,data){
        // 当访问的页面是index.html时进行模板引擎渲染
        if(req_url=='public/index.html'){
            let li_moudle=['<li>123</li>']
            for(i=0;i<arr_list.length;i++){
                li_moudle.push(`<li>${arr_list[i].txt}</li>`);
                console.log(li_moudle);
            }
            data=data.toString()
            data=template.render(data,{
                lists:li_moudle
            })
            // 这里是普通的replace方法替换
            // data=data.replace('^_^',li_moudle);
            // console.log(li_moudle);
        }
        if(err){
            return res.end('404 not found')
        }
        res.end(data);
    })
});
server.listen(3000,()=>{
    console.log('服务器运行中,127.0.0.1:3000');
})

实现思路

上面的代码就是用node几个核心模块搭建的一个最简单的服务器,一共有两个页面,一个是首页评论页面,一个是写评论页面,js文件在运行时会有一个数组存放评论数据,每次当用户增加评论时,都会把提交的数据通过push()方法添加到数组中,提交完成后会重定向到首页,首页每次刷新时候都会通过模板引擎重新渲染
1.打开服务器
创建一个server对象,并且监听3000端口
nodemon
这里安装了一个nodemon,用nodemon打开服务器可以在代码改变时候服务器同步刷新
2.暴露可以被用户访问到的文件
在收到客户端访问时,动态的给访问路径前拼接一个public路径,然后打开访问路径,这样就只能访问到public目录下的所有资源了
url.parse
url.parse可以解析访问网址,并且解析出get请求数据,但是由于新版的node不再使用该方法,所以会出现一些错误,可以用JSON转换一次

let str=url.parse(req.url,true).query;
        str=JSON.stringify(str);
        str=JSON.parse(str);

3.重定向
这里重定向用的是302状态码

        res.statusCode=302
        res.setHeader('Location','/');
        res.end();

4.模板引擎渲染
这里模板引擎渲染采用art-template模块,这是第三方模块,需要npm下载

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-04 11:23:53  更:2022-02-04 11:25:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:43:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码