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下载

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值