SyntaxError: identificador inesperado

Sou novo nodo.js. Criei um ficheiro chamado app.js e coloque este código nesse ficheiro usando o express para mudar o motor do modelo:

//module dependencies

var express = require('express');
    routes = require ('./routes');
    user = require ('./routes/user');
    http= require ('http');
    path = require ('path');

var exphbs = require ('express3-handlebars');
var app = express();

//all environement
app.set ('port', process.env.PORT || 3000);
app.set('views', __dirname +'/views');
//app.set('view engine','jade');
app.engine('handlebars',exphbs({defaultLayout :'main'}));
app.set('view engine ','handlebars');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname,'public')));

//developpement only
if ('developpement' == app.get('env')){
    app.use(express.errorHandler());
}

//app.get('/', routes.index);
//app.get ('/user' , user.list);
app.get('/' , function(req,res) {
    res.render('home');
}
http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

Então eu corro a aplicação e eu recebo este erro:

http.createServer(app).listen(app.get('port'), function(){
^^^^
SyntaxError: Unexpected identifier
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:929:3

Esta linha está a causar o erro:

http.createServer(app).listen(app.get('port'), function(){
Author: Nafa Ȝ Lamine, 2015-02-11

2 answers

Falta-te um aparelho de fecho em

app.get('/' , function(req,res) {
  res.render('home');
}) // <-- the last one

Deve usar um editor que forneça realce de sintaxe adequado e um código semelhante ao jshint que o alertaria sobre isto e também o alertaria sobre declarações variáveis impróprias:

var onevar = 'value'; // <-- superbad! You just ended this statement!
    another = 'val2'; // <-- now this variable leaked into global scope!
// Proper:
var onevar = 'value';
var another = 'val2';
// Also proper:
var onevar = 'value',
    another = 'val2';

O SyntaxError: Unexpected identifier é sempre um erro de digitação (ou está a tentar fazer algo que o JavaScript não compreende) algures no seu código e normalmente acontece antes de o identificador inesperado. Simplificando, basicamente significa que o analisador estava no meio de alguma declaração e, de acordo com as regras da gramática, a coisa que se seguiu não era aceitável para essa situação particular.

 5
Author: Robert Rossmann, 2015-02-11 00:13:04
Acho isto incorrecto.
var express = require('express');
    routes = require ('./routes');
    user = require ('./routes/user');
    http= require ('http');
    path = require ('path');
Acho que deves tentar algo assim.
var express = require('express'),
    routes = require ('./routes'),
    user = require ('./routes/user'),
    http= require ('http'),
    path = require ('path');

Ou

var express = require('express');
var routes = require ('./routes');
var user = require ('./routes/user');
var http= require ('http');
var path = require ('path');
 2
Author: siavolt, 2015-02-10 23:23:48