Node.js,Expressjs,Mongo,Jade:`new`动作传递初始化的mongo实例导致'ReferenceError:jade未定义'

时间:2012-10-24 06:08:13

标签: node.js express mongoose pug

来源:github

在尝试通过expressjs'render函数传递一个刚刚实例化的mongoose.model时,我遇到了以下错误:“ReferenceError:jade未定义”

控制器......

var mongoose = require("mongoose")
  , Client = mongoose.model("Client")

exports.new = function (req, res) {
    res.render("clients/new", {
        headline: "New Client",
        client: new Client({})
    })
}

我还尝试了client: new Client(),将实例化的对象存储在var中,然后将其传递给最终的渲染对象而不做任何更改。删除new Client({})位会超过500错误,但不能解决手头的问题。

一些配置......

app.set("views", __dirname + "/app/views")
app.set("view engine", "jade")

模特......

var mongoose = require("mongoose")
  , Schema = mongoose.Schema

var Client = new Schema({
    company: { type: String },
    contact: {
        name: { type: String },
        phone: { type: String },
        email: { type: String }
    },
    created: { type: Date, default: Date.now }
})

mongoose.model("Client", Client)

节点v0.8.12
Express> = v3.0.0
猫鼬v3.3.1
翡翠v0.27.6

来源:github

1 个答案:

答案 0 :(得分:4)

这个问题显然是由jade模板引擎中的关键字冲突引起的。

我发现你的问题描述很有趣,可以自己尝试一下。将jade模板变量标识符client更改为myclient并传递新的mongoose Client模型实例后,一切正常:

在app / controllers / clients_controller中:

...
res.render("clients/new", {
    headline: "New Client",
    myclient: new Client({company: 'Foo Company'})
})
...

在views / clients / new中:

...
input(type='text',name='company',placeholder='Company',value='#{myclient.company}')
...

我分叉了您的存储库,提交了这些更改并向您发送了拉取请求(首先是因为我对git相对较新,并抓住每个机会学习更多基础知识)。