10
votes

I'm using express and node. In my server.js file I have this piece of code:

app.use(express.static('/static'));

And subsequently in my static directory, I have a CSS folder, and then a style.css file. In my index.html, I link to the sheet like so:

  <link rel="stylesheet" type="text/css" href="/static/css/style.css">

However, in my local host I continue to get this error:

Refused to apply style from 'http://localhost:3500/static/css/style.css' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.

I am sure that my path name in my tag is right, and I'm confused to why I'm getting this error. Do I need to declare that CSS files be processed as CSS and not HTML? Am I not doing that when I say type="text/CSS"? If not, what do I need to put into my server file to remedy this issue?

4

4 Answers

8
votes
app.use(express.static('/static'));

means that the static files are served literally from /static. In a Unix-Based Operating System, this is a direct child to the directory root /. I don't think you do, but you shouldn't store files, let alone publicly accessible files in that directory. Instead what you are probably looking for is the static directory in your App's directory.

This is how you can tell express to use that one to server files:

app.use(express.static(__dirname + "/static"));

The MIME Type Error is happening because the file served is likely a "404 Not Found" page made by Express, because it couldn't locate the file.

If you can't include a file in your HTML always double, or better even tripple check, that the file can be accessed through the browser first.

Also, the files are then located in /..., not /static/...

0
votes

I had the same error, but it was caused by a not machting case. I wrote in my HTML file:

<script src = "./myScript.js"></script>

But the actual filename was MYSCRIPT.js. I didn't noticed that, because when I open the HTML file locally, browsers seem to ignore this and import even files where the cases not match.

0
votes

In my case it was what Luca Kiebel said:

The MIME Type Error is happening because the file served is likely a "404 Not Found" page made by Express, because it couldn't locate the file.

Just click the link from the debug Console in your browser and see what it actually returns.

0
votes

As other posters have said this is rarely and 'actual' MIME type issue.

Usually it's a combination of badly defined public / static file config and poorly liked files.

Answer

Example file structure

// file structure
public/
  assets/
    css/
      stylesheet.css
    images/
      avater.jpeg
  js/ 
    main.js
controllers/
  user
    createUser.js
    readUser.js
models/
  User.js
  index.js
views/
  layouts/
    main.handlebars
  homepage.handlebars
server.js
app.js

Basic serving of files from /public

From the Express docs here : https://expressjs.com/en/starter/static-files.html

app.use(express.static('public'))

This will only work if our server is at the root of the filesystem, which for servers is fine - for anything else, not so much.

Dynamic link to /public

app.use(express.static(__dirname + '/public'))

This will build up the path to public from the directory name of the node app.

It will allows us to place the project folder anywhere on the drive without getting in the way of the runtime.

Using files from /public

// homepage.handlebars
<section>
</section>
<script src="/js/main.js"></script>

Explanation is provided in the above Express docs.

// Sample of file paths created by public/
http://localhost:3000/js/main.js

This means that when we link to that file we only have to add the / prefix to our files / folders.