CSS文件樣式失效


發現問題

我的一個node項目需要使用另一個靜態資源服務器的資源文件(主要是js,css,html文件),在使用此服務的過程中,我發現css文件並沒有起效

app.js
var http = require('http');
var fs = require('fs');
const path = require('path');

http.createServer(function (request, response) {

    // 發送 HTTP 頭部 
    // HTTP 狀態值: 200 : OK
    // 內容類型: text/plain
    // console.log(request)
    //{'Content-Type':'text/html;charset=utf-8'}
    response.setHeader('Access-Control-Allow-Origin', '*');
    try{
        let prepath = request.url.split('?')[0]
        //一開始出錯時的設置
        //response.setHeader('Content-Type', 'text/javascript;charset=utf-8');
        
        //根據文件類型,設置響應頭或者不寫返回的數據的格式及編碼
         if(prepath.endsWith('.js')){
             response.setHeader('Content-Type', 'text/javascript;charset=utf-8');
         }else if(prepath.endsWith('.css')){
             response.setHeader('Content-Type', 'text/css;charset=utf-8');
         }else if(prepath.endsWith('.html')){
             response.setHeader('Content-Type', 'text/html;charset=utf-8');
         }
        
        
        if(prepath.includes('/static/pubilc')){
            prepath = prepath.split('/static/pubilc')[1]

        }
        console.log(prepath)
        if(prepath.includes('css/page')||prepath.includes('js/page')){
            response.statusCode = 302
            response.setHeader('Location', 'http://localhost:3000'+prepath)
            response.end()
            return
        }
        const filepath = path.join(__dirname,'/public',prepath)
        // console.log(filepath)
        if(fs.existsSync(filepath)){
            const stream = fs.createReadStream(filepath);
            stream.pipe(response)
        }else{
            response.end('文件不存在')
        }
    }catch(e){
        response.end(JSON.stringify(e))
    }
    // response.end(request.url)
}).listen(3001);

// 終端打印如下信息
console.log('Server running at http://127.0.0.1:3001/');

處理問題

我參考css錯誤排查查找錯誤,在進行css編碼檢查時,發現響應頭設置成了response.setHeader('Content-Type', 'text/javascript;charset=utf-8');,於是我便把他改成根據請求文件后綴(.js、.css、.html)來設置不同的content-type,進行測試,css起效了,於是我想這個問題的原因可能是瀏覽器解析文件流時優先以content-type決定文件類型,在不提供content-type的情況下,瀏覽器應該會自動進行判斷,大概率優先以文件后綴名判斷,於是我去掉了content-type設置,進行測試,css文件任然有效,但考慮到瀏覽器的種類很多,保險起見,我還是加上了content-type的設置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM