2013-10-21 35 views
6

Düğüm öğrenmeye yeni başladım ve Düğüm ve Express kullanarak bir web uygulaması oluşturmaya çalışıyorum. Ve aşağıdaki kod yapısı ile app.js dosyada aşağıdaki kod var.NodeJs ExpressJ'leri Kullanma: TypeError: string, Function.app.render öğesinde bir işlev değil

Dizin Yapısı: 3000:

app 
    assets 
    controller 
    model 
    view 
     index.jade 
global 
node_modules 
app.js 
package.json 

-js-

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

app.configure(function() { 
    app.set('view', __dirname + '/app/view'); 
    app.set('view engine', 'jade'); 
    app.use(app.router); 
}); 

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

app.listen(3000); 
console.log('Listening on port 3000'); 

komutu node app koşu ve localhost'a gittikten sonra. Aşağıdaki hatayı alıyorum. Bu satırdaki dizgeyi beğenmediğimi varsayıyorum ->res.render('index', {title: 'express'});. Ancak, Google'da bulduğum her şeyden doğru görünüyor. Yani başka bir şey eksik olmalıyım.

HATA MESAJI:

TypeError: dize Function.app.render bir fonksiyonu değildir (C: \ myapp \ ifade \ node_modules \ ifade \ lib \ application.js: 12: 488) ServerResponse de .res.render (C: \ myapp \ express \ node_modules \ express \ lib \ response.js: 803: 7) C: \ myapp \ express \ app.js: 19: 6 geri aramalarda (C: \ myapp \ express \ node_modules \ express \ lib \ router \ index.js: 164: 37) geçişte (C: \ myapp \ express \ node_modules \ express \ lib \ router \ index.js: 138: 11) geçişte (C: \ myapp Nesnede Router._dispatch'de (C: \ myapp \ express \ node_modules \ express \ lib \ router \ index.js: 173: 5) \ express \ node_modules \ express \ lib \ router \ index.js: 145: 5). yönlendirici (C: \ myapp \ express \ node_modules \ express \ lib \ router \ index.js: 33: 10) sonraki (C: \ myapp \ express \ node_mod ules \ express \ node_modules \ connect \ lib \ proto.js: 190: 15) Object.expressInit [tutamaç] (C: \ myapp \ express \ node_modules \ express \ lib \ middleware.js: 30: 5)

cevap

15

Bence bu sadece 'view' (çoğul) yerine 'view' (tekil) ayarlayan bir yazım hatası/hata. Bu örneğe bakın. Ekspres uygulama nesnesinin hem 'görünüm' hem de 'görüş' ayarlarına sahip olduğunu düşünüyorum ama farklı şeyler ifade ediyorlar.

https://github.com/visionmedia/express/blob/master/examples/jade/index.js

İşte düzeltme net olmak var: sorun gibi görünüyor

app.set('views', __dirname + '/app/view'); 
+0

Evet,. Tabii ki şimdi girinti için yeni bir erorrım var. Ama bunu düzeltebilirim. "Görünümlerin" dizin ismimle eşleşmesi varsayımı altındaydım. Sanırım yanılıyordum. Her neyse yardım için teşekkürler. –

+0

Yeah TJ, başlangıçta son derece kafa karıştırıcı bir adlandırma ustasıdır, ancak siz ondan sonra özlüdür. "app.get", "app.use", "app.configure" bir döngü için noobs atar. Bu sadece app.set ('viewPath') 'IMHO olmalıdır. Ayrıca, "app.configure" sarmalayıcınızı, hassas bir şekilde jack squat gerçekleştirirken de kaldırabilirsiniz. –

İlgili konular