0
votes

I am getting TypeError: this.engine is not a function. I don`t know why I am getting this error. Can anyone please help me to solve this issue.

My server file:

var express = require('express');

var path = require('path');

var app = express();

//configure app
app.set('view engine', 'html');
app.set('views', path.join(__dirname, 'views'));

app.get('/', function (req, res) {
    res.render('index');
});


app.listen(3000, function() {
    console.log('Ready on port 1337');
});

And my HTML file:

<!DOCTYPE html>
<html>

<head>

</head>

<body>
    <div>Hello Express</div>
</body>

</html>

I get the error

enter image description here

My package.json:

{
    "name": "app",
    "version": "1.0.0",
    "main": "index.html",
    "directories": {
        "test": "test"
    },
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "mehadi",
    "license": "UNLICENSED",
    "dependencies": {
        "express": "4.13.0",
        "html": "^1.0.0"
    },
    "repository": {
        "type": "git",
        "url": "(github.com/mehadi07/Random.git)"
    },
    "devDependencies": {},
    "description": ""
}

I installed the html engine via

npm install --save html
2
What's your package.json? Where are you registering this 'html' view engine, and what engine are you registering? - T.J. Crowder
What template engine you're trying to use ? I don't recognize html-template engine. Have you installed the engine (with npm) ? Please RTFM: expressjs.com/en/guide/using-template-engines.html - user272735
{ "name": "app", "version": "1.0.0", "main": "index.html", "directories": { "test": "test" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "mehadi", "license": "UNLICENSED", "dependencies": { "express": "4.13.0", "html": "^1.0.0" }, "repository": { "type": "git", "url": "(github.com/mehadi07/Random.git)" }, "devDependencies": {}, "description": "" } - Md Mehadi Hasan Mozumder
i used npm install --save html - Md Mehadi Hasan Mozumder
@MdMehadiHasanMozumder: To improve the question, add details, etc, use the "edit" link, not comments. - T.J. Crowder

2 Answers

1
votes

The html package you've installed is unrelated to Express. So it's not surprising that if you tell Express to use it, it fails.

If you're looking to serve static HTML files, see this question's answers, and the Express documentation. The simplest way is just

app.use(express.static('views'));
1
votes

html package is not a template engine that can be used with Express. Instead it is a HTML pretty printer CLI utility.

Please see Using template engines with Express for a list of template engines that works fine with Express.