0

I am trying to learn node.js. I want to be able to use the vash view engine but for some reason I cannot get it to work. I watched a tutorial on Pluralsight and referenced the vash docs but I keep getting the same error. Here is my code

server.js:

var http = require('http');
var port = process.env.port || 1337;

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

app.set("view engine", "vash");
app.get("/", function (req, res) { 
    res.render("index", { title: "Express + Vash" });
});

var server = http.createServer(app);
server.listen(port);

layout.vash:

<!DOCTYPE html>
<html>
    <head>
        <title>@model.title</title>
    </head>
    <body>
        <div>@html.block("body")</div>
    </body>
</html>

index.vash

@html.extend('views/layout', function(model) { 

    @html.block("body", function(model) {

        <h1>@model.title</h1>
        <p>This id from the server</p>

    })

})

the stacktrace:

TypeError: undefined is not a function
   at View.render (C:\Users\Michael\Desktop\Node_Stuff\LearnNode\TheBoard\node_modules\express\lib\view.js:93:8)
   at EventEmitter.app.render (C:\Users\Michael\Desktop\Node_Stuff\LearnNode\TheBoard\node_modules\express\lib\application.js:566:10)
   at ServerResponse.res.render (C:\Users\Michael\Desktop\Node_Stuff\LearnNode\TheBoard\node_modules\express\lib\response.js:938:7)
   at C:\Users\Michael\Desktop\Node_Stuff\LearnNode\TheBoard\server.js:9:9
   at Layer.handle [as handle_request] (C:\Users\Michael\Desktop\Node_Stuff\LearnNode\TheBoard\node_modules\express\lib\router\layer.js:82:5)
   at next (C:\Users\Michael\Desktop\Node_Stuff\LearnNode\TheBoard\node_modules\express\lib\router\route.js:110:13)
   at Route.dispatch (C:\Users\Michael\Desktop\Node_Stuff\LearnNode\TheBoard\node_modules\express\lib\router\route.js:91:3)
   at Layer.handle [as handle_request] (C:\Users\Michael\Desktop\Node_Stuff\LearnNode\TheBoard\node_modules\express\lib\router\layer.js:82:5)
   at C:\Users\Michael\Desktop\Node_Stuff\LearnNode\TheBoard\node_modules\express\lib\router\index.js:267:22
   at Function.proto.process_params (C:\Users\Michael\Desktop\Node_Stuff\LearnNode\TheBoard\node_modules\express\lib\router\index.js:321:12) 

The .vash files are in the views folder which is at the root of the project.

Thanks in advance!

DNA
  • 42,007
  • 12
  • 107
  • 146
Michael W Riemer Jr
  • 531
  • 2
  • 8
  • 16
  • Latest [Vash author's example](https://github.com/kirbysayshi/vash-express-example) fails with a more descriptive error: `500 RangeError: Problem while rendering template at line 23, character 1.` etc... – Sergei Z Mar 22 '15 at 06:43

2 Answers2

0

Per this vash issue the following should work:

var vash = require('vash');
vash.__express = vash.renderFile;
app.set("view engine", "vash");
Sergei Z
  • 535
  • 3
  • 10
0

In your index.vash, just use '/layout' instead of 'views/layout'.

That is:

@html.extend(**'/layout'**, function(model) { ... });
almightyGOSU
  • 3,731
  • 6
  • 31
  • 41
robinhood9
  • 137
  • 1
  • 5