2013-10-21 6 views
6

Ho appena iniziato a imparare il nodo e sto provando a creare un'applicazione web utilizzando Node ed Express. E ho il seguente codice nel mio file app.js, con la seguente struttura di directory.NodeJs Utilizzo di ExpressJs: TypeError: string non è una funzione in Function.app.render

Directory Structure:

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'); 

Dopo aver eseguito il comando node app e andando a localhost: 3000. Ottengo il seguente errore. Presumo che non gli piaccia la stringa su questa linea ->res.render('index', {title: 'express'});. Comunque da tutto quello che ho trovato su Google sembra giusto. Quindi mi devo perdere qualcos'altro.

MESSAGGIO DI ERRORE:

TypeError: stringa non è una funzione a Function.app.render (C: \ myapp \ Express \ node_modules \ Express \ lib \ application.js: 488: 12) a ServerResponse .res.render (C: \ myapp \ express \ node_modules \ express \ lib \ response.js: 803: 7) in C: \ myapp \ express \ app.js: 19: 6 ai callback (C: \ myapp \ express \ node_modules \ express \ lib \ router \ index.js: 164: 37) al parametro (C: \ myapp \ express \ node_modules \ express \ lib \ router \ index.js: 138: 11) al passaggio (C: \ myapp \ express \ node_modules \ express \ lib \ router \ index.js: 145: 5) su Router._dispatch (C: \ myapp \ express \ node_modules \ express \ lib \ router \ index.js: 173: 5) su Object. router (C: \ mioapp \ express \ node_modules \ express \ lib \ router \ index.js: 33: 10) al prossimo (C: \ mioapp \ express \ node_mod ules \ express \ node_modules \ connect \ lib \ proto.js: 190: 15) su Object.expressInit [come handle] (C: \ myapp \ express \ node_modules \ express \ lib \ middleware.js: 30: 5)

risposta

15

Penso che questo sia solo un errore di typo/errore 'view' (singolare) invece di 'views' (plurale). Guarda questo esempio. Penso che l'oggetto dell'applicazione express abbia sia le impostazioni 'view' che 'views' ma significano cose diverse.

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

Ecco il fix per essere chiari:

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

Yep, che sembra essere il problema. Ovviamente ora ho un nuovo erorr per indentation. Ma posso aggiustarlo. Ero sotto il presupposto che 'views' doveva corrispondere al mio nome di directory. Credo di aver sbagliato. Comunque, grazie per l'aiuto. –

+0

Sì, TJ è un maestro di denominazione che inizialmente è estremamente confuso, ma è conciso una volta che ci si fa da esso. 'app.get',' app.use', 'app.configure' lanciano noobs per un ciclo. Questo dovrebbe essere semplicemente 'app.set ('viewPath')' IMHO. Inoltre puoi rimuovere il tuo wrapper 'app.configure' mentre sta eseguendo precisamente jack squat. –

Problemi correlati