簡體   English   中英

Node.js / Jade語法錯誤:意外令牌;

[英]Node.js/jade syntax error: unexpected token ;

我正在嘗試學習node.js。 我正在研究OReilly的書“使用mongodb和主干構建節點應用程序”中的示例。 我遇到了錯誤,但無法解決。

我搜尋了一段時間的錯誤(在我自己的代碼版本中)。 大多數類似的案例都與玉器嚴重解析注釋有關(我不在這里使用)。 看起來另一種可能性是模塊版本與該代碼或彼此不兼容,但是我不准備深入探討這一點。 我完全從示例中復制了代碼,而不是使用自己的版本,並且得到了相同的結果。

軌跡指向玉模板中的一行,但是我不確定問題出在哪里。

這是示例.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標簽之后添加一個點。 您還應該縮進代碼。 即它應該看起來像這樣:

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;
    };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM