全栈工程师-静态资源服务器搭建-0809

本文介绍如何使用Node.js快速搭建一个简易的静态资源服务器,并演示了处理不同URL请求的方法及文件读取操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作说明补充

pwd 当前路径用户命令
tab 自动补前
[]  是可选参数,建议加上;号
/liwei

1. 搭建静态资源服务器

const http = require('http');
const ip = '192.168.92.129';
const port = 3000;
var f=function(req,res){
    res.writeHead(200,{'Content-Type':'text/html'});
    res.write('<html>');
    res.write('<head>');
    res.write('</head>');
    res.write('<body>');
    res.write('hello');
    res.write('</body>');
    res.write('</html>');
    res.end();
}
var f2=function(){
    console.log('server start');
}
http.createServer(f).listen(port,ip,f2);

2.url请求服务器

const http = require('http');
const url=require('url'); //
const ip = '192.168.92.129';
const port = 3000;
var f=function(req,res){
     var pathname=url.parse(req.url).pathname;
     res.write(pathname);
     res.end();
}
var f2=function(){
    console.log('server start');
}
http.createServer(f).listen(port,ip,f2);

3.文件读取

const http = require('http');
const url=require('url'); //
const fs=require('fs'); //

const ip = '192.168.92.129';
const port = 3000;
fs.readFile('xiaoniu.txt',(err,data) =>{
    if (err) throw err;
    console.log(data.toString());
});
var f=function(req,res){
     var pathname=url.parse(req.url).pathname;
     res.write(pathname);
     res.end();
}
var f2=function(){
    console.log('server start');
}
http.createServer(f).listen(port,ip,f2);

touch xiuniu.txt //创建文件


4.文件读取

const http = require('http');
const url=require('url'); //
const fs=require('fs'); //

const ip = '192.168.92.129';
const port = 3000;
// fs.readFile('xiaoniu.txt',(err,data) =>{
//     if (err) throw err;
//     console.log(data.toString());
// });
var data = fs.readFileSync('xiaoniu.txt');
var f=function(req,res){
     var pathname=url.parse(req.url).pathname;
     res.write(pathname + '\n');
     res.write('\n');
     res.write(data.toString());
     res.end();
}
var f2=function(){
    console.log('server start');
}
http.createServer(f).listen(port,ip,f2);

5.首先加载需要用到的模块

var http = require('http'); //加载httpe服务API模块
var ip = '192.168.92.129';
var fs=require('fs');       // 加载fs文件服务api模块
var server=new http.Server(); //创建新的HTTP服务器
var urlapi=require('url');    //创建url路由api模块
server.listen(3000,ip);       //监听端口3000

//使用on方法注册事件处理,该事件一直被监听,任何的请求都 会进入回调函数,执行相应原操作
server.on('request',function(request,response){//当有request请求的时候触发处理函数
//解析请求的URL
    var url =urlapi.parse(request.url);
//监听请求网站,以当前脚本目录为目录的URL地址
    console.log(url,pathname);
//特殊URL会让服务器再发送响应前先等待
    swith(url.pathname){
        case '' || '/': //处理请求的网站根目录,指定加载的对应的文件夹,一般以根目录的index.html为默认,nodejs是高效流处理的方案,也可以通过配置文件来配置
        fs.readFile("./index.html",function(err,content){

            if(err){//输出错误信息,也可以自定义错误信息。
                response.writeHead(404,{'Content-Type':'text/plain;charset="utf-8"'});
                response.write(err.message);
                response.end();
            }else{//请求成功返回数据
                response.writeHead(200,{'Content-Type':'text/plain;charset="utf-8"'}); //告诉相应头文件,返回数据的类型。
                response.write(content); //返回的内容,有时候还会加buter数据类型
                response.end(); //结束响应,不写的话,会一直处于响应状态,页面不会显示内容
            }
        });
        break;
    case './list'://显示商品列表页
    fs.readFile("./list.html",function(err,content)){
       if(err){
        response.end(err.message);
       }else{
        response.writeHead(200,{'Content-Type':'text/html;charset="utf-8"'});//告诉相应头文件,返回数据的类型
        response.write(content);//返回的内容,有时候还会加上buter数据类型
        response.end(); //结束响应,不写的话,会一直处于响应状态,页面不会显示内容
       }
    })
       break;
       case '/goods':
       fs.readFile("./shopInfo.html",function(err,content)){
    if(err){
        response.end(err.message);
       }else{
        response.writeHead(200,{'Content-Type':'text/html;charset="utf-8"'});//告诉相应头文件,返回数据的类型
        response.write(content);//返回的内容,有时候还会加上buter数据类型
        response.end(); //结束响应,不写的话,会一直处于响应状态,页面不会显示内容
       }
    })
break;
default:
var filename =url.pathname.substring(1); 
var type=getType(filename.substring(filename.lastIndexof('.')+1));
console.log(filename);
fs.readFile(filename,function(err,content)){
    if(err){
response.writeHead(404,{'Content-Type':'text/plain;charset="utf-8"'});
response.end(err.message);
response.end(); 
}else{
    response.writeHead(200,{'Content-Type':type});//告诉相应头文件,返回数据的类型
        response.write(content);//返回的内容,有时候还会加上buter数据类型
        response.end(); //结束响应,不写的话,会一直处于响应状态,页面不会显示内容
}

});
break;
})
//这里定义了一个用来判断文件类型的函数
function getType(endTag){
    var type=null;
    switch(endTag){
        case 'html':
        type='text/html;charset="utf-8"';
        break;
        case 'htm':
        type='text/html;charset="utf-8"';
        break;
        case 'js':
        type='application/javascript;charset="utf-8"';
        break;
        case 'css':
        type='text/css;charset="utf-8"';
        break;
        case 'txt':
        type='text/plain;charset="utf-8"';
        break;
        case 'manifest':
        type='text/cache-manifest;charset="utf-8"';
        break;
        default :
        type='application/octet-stream';
        break;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曹渊说技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值