Node.js / jade语法错误:意外的令牌;

我正在学习node.js 我正在通过OReilly书中的一个例子“用mongodb和backbone构build节点应用程序”。 我遇到了一个错误,我一直无法解决。

我找了一段时间的错误(在我自己的代码版本)。 大多数类似的情况与玉石parsing评论严重(我不在这里使用)有关。 看起来另一个可能性是模块版本不兼容这个代码或其他,但我不准备深入了解。 我完全从示例中复制了代码,而不是使用自己的版本,而且得到了相同的结果。

跟踪指向玉模板中的一行,但我不确定问题的真正目的。

以下是示例.js文件中的代码:

var http = require('http'); var express = require('express'); var app = express(); var server = http.createServer(app); var io = require('socket.io').listen(server); var catchPhrases = ['Why I oughta...', 'Nyuk Nyuk Nyuk', 'Poifect!', 'Spread out!', 'Say a few syllables!', 'Soitenly!']; app.set('view engine', 'jade'); app.set('view options', { layout: true}); app.set('views', __dirname + '/views'); app.get('/stooges/chat', function(req, res, next) { res.render('chat'); }); io.sockets.on('connection', function(socket) { var sendChat = function(title, text) { socket.emit('chat', { title: title, contents: text }); }; setInterval(function() { var randomIndex = Math.floor(Math.random() * catchPhrases.length); sendChat('Stooge', catchPhrases[randomIndex]); }, 5000); sendChat('Welcome to Stooge Chat', 'The Stooges are on the line'); socket.on('chat', function(data) { sendChat('You', data.text); }); }); app.get('/?', function(req, res) { res.render('index'); }); var port = 8080; server.listen(port); console.log('Listening on port ' + port); 

这里是相应的玉模板:

 extends layout block scripts script(type='text/javascript', src='/socket.io/socket.io.js') script(type='text/javascript') var socket = io.connect('http://localhost:8080'); socket.on('chat', function(data) { document.getElementById('chat').innerHTML = '<p><b>' + data.title + '</b>: ' + data.contents + '</p>'; }); var submitChat = function(form) { socket.emit('chat', {text: form.chat.value}); return false; }; block content div#chat form(onsubmit='return submitChat(this);') input#chat(name='chat', type='text') input(type='submit', value='Send Chat') 

这里是输出:

  info - socket.io started Listening on port 8080 SyntaxError: /home/rob/Documents/Node/views/chat.jade:9 7| socket.on('chat', function(data) { 8| document.getElementById('chat').innerHTML = '<p><b>' + data.title + '</b>: ' + data.contents + '</p>'; > 9| }); 10| var submitChat = function(form) { 11| socket.emit('chat', {text: form.chat.value}); 12| return false; Unexpected token ; at Function (<anonymous>) at assertExpression (/home/rob/Documents/Node/node_modules/jade/lib/lexer.js:31:3) at Object.Lexer.attrs (/home/rob/Documents/Node/node_modules/jade/lib/lexer.js:648:20) at Object.Lexer.next (/home/rob/Documents/Node/node_modules/jade/lib/lexer.js:868:15) at Object.Lexer.lookahead (/home/rob/Documents/Node/node_modules/jade/lib/lexer.js:114:46) at Parser.lookahead (/home/rob/Documents/Node/node_modules/jade/lib/parser.js:100:23) at Parser.peek (/home/rob/Documents/Node/node_modules/jade/lib/parser.js:77:17) at Parser.tag (/home/rob/Documents/Node/node_modules/jade/lib/parser.js:733:22) at Parser.parseTag (/home/rob/Documents/Node/node_modules/jade/lib/parser.js:719:17) at Parser.parseExpr (/home/rob/Documents/Node/node_modules/jade/lib/parser.js:188:21) 

在Jade模板中编写内联JavaScript时,您需要在脚本标签之后添加一个点。 你也应该缩进你的代码。 即它应该是这样的:

 script(type='text/javascript', src='/socket.io/socket.io.js') script(type='text/javascript'). var socket = io.connect('http://localhost:8080'); socket.on('chat', function(data) { document.getElementById('chat').innerHTML = '<p><b>' + data.title + '</b>: ' + data.contents + '</p>'; }); var submitChat = function(form) { socket.emit('chat', {text: form.chat.value}); return false; };