2

これは私の構成ファイルです。layout.jade が機能していないようです。しかし、翡翠は機能しています。Chrome を使用して確認しましたが、レイアウト HTML がページに読み込まれていないことを確認しました。

module.exports = function(app, express, mongoose){
    var config=this

    app.configure(function (){
        app.set('views',__dirname+'/views')
        app.set('view engine','jade')
        app.set('view options', {layout:true})

        app.use(express.bodyParser())
        app.use(express.methodOverride())
        app.use(express.cookieParser())
        app.use(express.session({secret: 'topsecret',store: new express.session.MemoryStore}))
        app.use(express.static(app.path.join(app.application_root,"public")))
        app.use(express.errorHandler({dumpExceptions:true,showStack:true}))
        app.use(express.bodyParser({keepExtensions: true, uploadDir:"./public/uploads"}))
        app.use(app.router)
    })

    /*DB part:*/
    app.mongoose.connect('mongodb://localhost/dio_database')

    return config
}

レンダリング コマンド:

app.get('/items/:id',function(req,res){
    models.ItemModel.findOne({_id:req.params.id}).exec(function(err,item){
        if (!err){
            res.render('item.jade',item)
        } else
            return console.log(err)
    })
})

私のlayout.jade、非常に単純です:

!!!
doctype 5
html
    head
        title "Dio"
        link(rel='icon', href='favicon.ico', type='image/x-icon')
        link(rel='shortcut', href='favicon.ico', type='image/x-icon')
        link(rel="shortcut", href="favicon.ico", type="image/vnd.microsoft.icon")
        link(rel="icon", href="favicon.ico", type="image/vnd.microsoft.icon")

        script(src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js")
        script(src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js")
        script(src="./javascripts/underscore-min.js")
        script(src="./javascripts/backbone-min.js")

        link(rel='stylesheet', href='./css/main.css', type="text/css", media="screen")
    body
        div#topbar Dio--where shitty thing happens
        div#main!= body
            footer
                p
                    | Node.js MVC template by XXX

そして、以下は私のnpmリストです:

├─┬ bcrypt@0.7.3
│ └── bindings@1.0.0
├─┬ express@3.0.3
│ ├── commander@0.6.1
│ ├─┬ connect@2.7.0
│ │ ├── bytes@0.1.0
│ │ ├── formidable@1.0.11
│ │ ├── pause@0.0.1
│ │ └── qs@0.5.1
│ ├── cookie@0.0.5
│ ├── cookie-signature@0.0.1
│ ├── crc@0.2.0
│ ├── debug@0.7.0
│ ├── fresh@0.1.0
│ ├── methods@0.0.1
│ ├── mkdirp@0.3.3
│ ├── range-parser@0.0.4
│ └─┬ send@0.1.0
│   └── mime@1.2.6
├── fs@0.0.0
├── imagemagick@0.1.3
├─┬ jade@0.27.7
│ ├── coffee-script@1.4.0
│ ├── commander@0.6.1
│ └── mkdirp@0.3.4
├─┬ mongodb@1.2.2
│ └── bson@0.1.5
├─┬ mongoose@3.4.0
│ ├── hooks@0.2.1
│ ├─┬ mongodb@1.1.11
│ │ └── bson@0.1.5
│ ├── ms@0.1.0
│ └── sliced@0.0.3
├─┬ node-static@0.6.5 extraneous
│ ├── colors@0.6.0-1
│ └─┬ optimist@0.3.5
│   └── wordwrap@0.0.2
└── path@0.4.9
4

1 に答える 1

12

実際、このような問題の理由は非常に単純です。Express 3 はもはやレイアウトをサポートしていません..しかし、悲しむ必要はありません。実際、Express 3 では、 block/extendsと呼ばれる、より自然で簡単な方法が採用され始めています。基本的な使用法は次のようになります。

// In layout file: layout.jade
html 
    head
        title XXX
        block scripts
    body
        block content
        block footer


// in a extended file, for example index.jade:
extends layout
block scripts
    //write javascript part
block content
    // write content
block footer
    // write the footer

実際には、より簡単で柔軟になります。やっと手に入れてうれしい。でも2時間以上かかりました。

この変更について、より明確かつ率直に言及する人がなぜこれほど少ないのか、私は不思議に思っています。この投稿が私のような一部の人々に役立つことを願っています。

于 2012-12-12T20:51:28.217 に答える