node.jspugpugjs

Unexpected token "indent" when using Pug templates


I have a simple application that should output a small content. I use NodeJs, Express and Pug.

const pug = require('pug');
const express = require('express');
const app = express();

const indexFile = 'index'; // the file to load

app.set('view engine', 'pug'); // use pug

app.get('/', function (req, res) {
  res.render(indexFile, {content: 7}); // load the file and set the variable to 7
});

app.listen(8888, function () {
  console.log('Server running on port 8888');
});

And my Pug file / HTML

doctype html
    link(rel='stylesheet', href='../CSS/requirements.css')
    script(src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js')
    body
      p = content

When starting the server I receive this error message

Error: C:\Users\mah\Desktop\Test\views\index.pug:2:1
    1| doctype html

  > 2|     link(rel='stylesheet', href='../CSS/requirements.css')

-------^
    3|     script(src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js')

    4|     body

    5|       p = content


unexpected token "indent"
    at makeError (C:\Users\mah\Desktop\Test\node_modules\pug-error\index.js:32:13)
    at Parser.error (C:\Users\mah\Desktop\Test\node_modules\pug-parser\index.js:53:15)
    at Parser.parseExpr (C:\Users\mah\Desktop\Test\node_modules\pug-parser\index.js:264:14)
    at Parser.parse (C:\Users\mah\Desktop\Test\node_modules\pug-parser\index.js:112:25)
    at parse (C:\Users\mah\Desktop\Test\node_modules\pug-parser\index.js:12:20)
    at Object.parse (C:\Users\mah\Desktop\Test\node_modules\pug\lib\index.js:126:22)
    at Function.loadString [as string] (C:\Users\mah\Desktop\Test\node_modules\pug-load\index.js:45:21)
    at compileBody (C:\Users\mah\Desktop\Test\node_modules\pug\lib\index.js:86:18)
    at Object.exports.compile (C:\Users\mah\Desktop\Test\node_modules\pug\lib\index.js:243:16)
    at handleTemplateCache (C:\Users\mah\Desktop\Test\node_modules\pug\lib\index.js:216:25)

Could someone help me out here?


Solution

  • I think you forget html just after doctype html.

    doctype html
    html
      link(rel='stylesheet', href='../CSS/requirements.css')
      script(src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js')
      body
        p=content
    

    doctype html and html should be at same intent level. Btw, change p = content to p=content to print passed value