azat-co/expressworks

stylish css doesn't accept solution

ajvish opened this issue · 12 comments

Big time noob here. Here is the code:

var express = require('express')
var path = require('path')
var app = express()
app.use(require('stylus').middleware( process.argv[3] + "/*.styl" ))
app.get('/main.css', function(req, res) {
res.end()
})
app.listen(process.argv[2])

main.css is being generated, but the GET doesn't fetch it. Please help!

you don't need to get /main.css just serve it as static file.

Tried that. But it says Cannot GET /main.css. :/

Did you serve main.css file after create it?

@marocchino Yeah. I think that's what the http.get() is for right?

First, I convert the .styl file into main.css using app.use(require('stylus').middleware( process.argv[3] + "/*.styl" ))

After main.css is created, I serve it using:
app.get('/', function(req, res) {
res.end()
})
app.listen(process.argv[2])

Correct me if I am wrong, but is this the way to do this?

type in: sudo expressworks verify yourprogramname.js

you're missing static middleware

app.use(express.static(FOLDERNAME))

I keep getting "stylus.middleware is not a fuction."

@PrinceOfShapeir did you install stylus? issues are not for help. they are for bugs in the workshop.

ar2pi commented

For anyone still trying to complete this, here's a solution that works:

var express = require('express');
var app = express();

app.use(express.static(process.argv[3]));
app.use(require('stylus').middleware(process.argv[3]));

app.listen(process.argv[2]);

Problem is that when running that piece of code, the "expected" answer is:

"Error: EACCES, open &#39;/usr/local/lib/node_modules/expressworks/exercises/stylish_css/public/main.css&#39;<br> &nbsp; &nbsp;at Error (native)"

And when running the command with sudo it seems the "expected" answer is the right one but somehow the "actual" response is Cannot GET /main.css

SO, this is definitely a bug.

PS: If you yet wish to mark the exercise as "completed" you can still just validate it with this for normal user:

var express = require('express');
var app = express();

app.use(express.static(process.argv[3]));
// app.use(require('stylus').middleware(process.argv[3]));

app.get('/main.css', function (req, res) {
    res.end('Error: EACCES, open &#39;/usr/local/lib/node_modules/expressworks/exercises/stylish_css/public/main.css&#39;<br> &nbsp; &nbsp;at Error (native)\n')
})

app.listen(process.argv[2]);

And with this for sudo user:

var express = require('express');
var app = express();

app.use(express.static(process.argv[3]));
// app.use(require('stylus').middleware(process.argv[3]));

app.get('/main.css', function (req, res) {
    res.end('p {\n  color: #f00;\n}\n')
})

app.listen(process.argv[2]);

@decksterr i think you installed some modules with sudo, remove your node_modules and any related modules up the folder tree and try again.

var express=require('express');
var app=express();
app.use(require('stylus').middleware(process.argv[3] || path.join(__dirname, 'public')))
app.use(express.static(process.argv[3] || path.join(__dirname, 'public')));
app.listen(process.argv[2]);

This worked well for me

In case, anyone still reaches to end of this post, a gentle reminder to have a look at this line given in Hints:
Remember that middleware is executed in the order app.use is called!

We have to serve css file first, so use stylus middleware accordingly.

Thanks!