javascript Node.js/jade 语法错误:意外令牌;
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/22524986/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Node.js/jade syntax error: unexpected token ;
提问by robm
I'm trying to learn node.js. I'm working through an example in the OReilly book "Building node applications with mongodb and backbone". I'm running into an error, and I haven't been able to work it out.
我正在尝试学习 node.js。我正在研究 OReilly 书中的一个示例“使用 mongodb 和主干构建节点应用程序”。我遇到了一个错误,我无法解决。
I hunted the error for a while (in my own version of the code). Most similar cases were related to jade parsing comments badly (which I'm not using here). Looks like another possibility is module versions not being compatible with this code or each other, but I'm not prepared to go digging into that. I copied the code exactly from the example instead of using my own version, and I'm getting the same result.
我搜索了一段时间的错误(在我自己的代码版本中)。大多数类似的案例都与 jade 解析评论错误有关(我在这里没有使用)。看起来另一种可能性是模块版本与此代码或彼此不兼容,但我不准备深入研究。我完全从示例中复制了代码,而不是使用我自己的版本,并且得到了相同的结果。
The trace points to a line in the jade template, but I'm not sure where the problem really is.
跟踪指向玉模板中的一行,但我不确定问题到底出在哪里。
Here's the code from the example .js file:
这是示例 .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);
And here's the corresponding jade template:
这是相应的玉模板:
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')
And here's the output:
这是输出:
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)
回答by Krasimir
While writing inline JavaScript in Jade template you need to add a dot after the script tag. Also you should indent your code. I.e. it should look like that:
在 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;
};