使用 node.js 以错误的 mime 类型发送样式表,我该如何解决?

Posted

技术标签:

【中文标题】使用 node.js 以错误的 mime 类型发送样式表,我该如何解决?【英文标题】:Stylesheet is sent with a wrong mime type using node.js, how do I fix that? 【发布时间】:2016-01-29 20:41:29 【问题描述】:

node.js/express 代码

var express = require('express'),
    app = express(),
    port = process.env.PORT || 3000,
    path = require('path');


app.use('/public', function (req, res) 
    res.sendfile(path.join(__dirname + '/public/index.html'));
);

app.use('/', function (req, res) 
    var data = '<h1>hello world</h1>';

    res.writeHead(200, 'Content-Type': 'text/html');
    res.end(data)
);

app.listen(port);

console.log('server started at port %s ', port);

html

<!DOCTYPE html>
<html lang="de">
  <head>
    <meta charset="utf-8">  
    <title>MME2 U1</title>

    <link rel="stylesheet" type="text/css" href="css/app.css">
    <script src="js/app.js" type="text/javascript"></script>

  </head>
  <body>
    <div class="wrap">
      <header>
        <h1>Multimedia Engeneering 2</h1>
        <h2>Übung 1</h2>
      </header>
      <div class="main">
        <div class="content">
          <section id="video1">
            <h3>WebM</h3>

            <video id="vid1" controls> 
              <source src=vid/small_WebM.webm type=video/webm> 
            </video>

            <div id="buttons">
              <button id="playVid1">▶</button>
              <button id="stopVid1">▇</button>
            </div>  
          </section>

          <section id="video2">
            <h3>Ogg Vorbis</h3>
            <video id="vid2" controls> 
              <source src=vid/small_Ogg.ogv type=video/ogg> 
            </video>
            <div id="buttons">
              <button id="playVid2">▶</button>
              <button id="stopVid2">▇</button>
            </div>
          </section> 

          <section id="video3">
            <h3>Mp4</h3>
            <video id="vid3" controls> 
              <source src=vid/small_mp4.mp4 type=video/mp4>
            </video>
            <div id="buttons">
                <button id="playVid3">▶</button>
              <button id="stopVid3">▇</button>
            </div>
          </section>
        </div>

        <div class="side">
          <ul>
            <li><a href="#video1">Video 1</a></li>
            <li><a href="#video2">Video 2</a></li>
            <li><a href="#video3">Video 3</a></li>
          </ul>
        </div>
      </div>

      <footer>
        <p>Lena Meßmer, Sophie Wirth</p>
      </footer> 
    </div>
  </body>
</html>

css代码

html, body
    margin: 0;
    padding: 0;
    font-family: Arial, Helvetica, sans-serif;


.wrap 
    margin: 0 auto;


header
    background: url(http://media.giphy.com/media/S3bkh4BuHMyfC/giphy.gif);
    padding: 1%;
    border-bottom: 3px solid #C9469A;


.main 
    width: 100%;
    margin: 0 auto;
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    justify-content: flex-start;
    align-content: stretch;
    align-items: flex-start;
    align-self: stretch;


.content 
    background: #fff;
    padding: 1%;
    order: 0;
    flex: 4 1 auto;
    align-self: auto;


.side 
    background: #FF91BA;
    padding: 1%;
    order: 0;
    flex: 2 1 auto;
    align-self: stretch;
    border-left: 12px solid #7F587C;

    color: #7F587C;


.side a 
    color: #7F587C;
    font-weight: bold;
    text-decoration: none;


.side li 
    margin: 3%;


section
    margin: 3%;


footer 
    width: 98%;
    background: #202020;
    padding: 1%;
    border-top: 3px solid #28b1b6;
    color: #939393;


.clearfix:after 
    content: ".";
    clear: both;
    display: block;
    visibility: hidden;
    height: 0px;


h1, h2, h3
    margin: 0;


h1 
    color: #fff;


h2 
    color: #fff;
    font-style: italic;


h3 
    color: #3c3c3c;
    width: 50%;
    border-bottom: 2px dashed #C9469A;
    margin-bottom: 1%;

.htaccess

AddType text/css .css
AddType text/javascript .js

node.js 代码在根目录,html 和 css 在 /public 子目录。 每次我加载侧面时,我都会得到: 资源解释为样式表,但使用 MIME 类型 text/html 传输:“http://localhost:3000/css/app.css”。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:
var express = require('express'),
    app = express(),
    port = process.env.PORT || 3000,
    path = require('path');

app.use('/public', express.static('public'));
app.use('/', function (req, res) 
    res.sendfile(path.join(__dirname + '/index.html'));
);
app.listen(port);

console.log('Server started at http://localhost:%s/', port);

所以我像这样重写了我的代码,并且成功了。 仅当我将 express.static 用于公共子网址时,它才发生变化。

【讨论】:

以上是关于使用 node.js 以错误的 mime 类型发送样式表,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

将音频从浏览器流式传输到具有特定 MIME 类型的 node.js 服务器

node.js express - mime 类型 woff 字体返回为 text/plain 类型

由于 MIME 类型错误而拒绝应用样式

node.js 中的标头 - 套接字 io 资源解释为脚本,但使用 MIME 类型 text/plain 传输:

使用 nodemailer 在 Node.JS 中发送电子邮件(错误:554 6.6.0 发送消息以进行传递时出错)

mime模块响应或设置Node.js的Content-Type头