加载socket.io.js时Node.js“未捕获的语法错误:意外的令牌<”

Posted

技术标签:

【中文标题】加载socket.io.js时Node.js“未捕获的语法错误:意外的令牌<”【英文标题】:Node.js "Uncaught SyntaxError: Unexpected token <" when loading socket.io.js 【发布时间】:2014-07-13 08:57:45 【问题描述】:

我有一个使用 node.js 和 express 框架测试 socket.io 的简单应用程序

有一些与我的应用相关的文件

文件 server.js

var express = require('express');

var env = process.env.NODE_ENV = process.env.NODE_ENV || 'development';

var app = express();
var http = require('http');
var server = http.createServer(app);

var config = require('./server/config/config')[env];

require('./server/config/express')(app, config);

/////////////////////////// Database ////////////////////////////////
require('./server/config/mongoose')(config);

/////////////////////////// Passport ////////////////////////////////
require('./server/config/passport')();

/////////////////////////// Routes ////////////////////////////////
require('./server/config/routes')(app);

/////////////////////////// Socket ////////////////////////////////
require('./server/config/socket')(server);

/////////////////////////// Port ////////////////////////////////
app.listen(config.port);
console.log("Listening on port " + config.port + '...');

文件 express.js

var express = require('express'),
    stylus = require('stylus'),
    passport = require('passport');

module.exports = function(app, config)
    function compile(str, path)
        return stylus(str).set('filename', path);
    ;

    app.configure(function()
        app.set('views', config.rootPath + '/server/views');
        app.set('view engine', 'jade');
        app.use(express.logger('dev'));
        app.use(express.cookieParser());
        app.use(express.bodyParser());
        app.use(express.session(secret: 'test whiteboard unicorns'));
        app.use(passport.initialize());
        // using session
        app.use(passport.session());
        // config Stylus middleware
        app.use(stylus.middleware(
            src: config.rootPath + '/public',
            compile: compile
        ));
        app.use(express.static(config.rootPath + '/public',  redirect : false ));
    );

script.jade

script(type="text/javascript", src="/vendor/jquery/dist/jquery.min.js")
script(type="text/javascript", src="/vendor/angular/angular.js")
script(type="text/javascript", src="/vendor/bootstrap/dist/js/bootstrap.min.js")
script(type="text/javascript", src="/vendor/toastr/toastr.min.js")
script(type="text/javascript", src="/vendor/restangular/dist/restangular.min.js")
script(type="text/javascript", src="/vendor/lodash/dist/lodash.min.js")
script(type="text/javascript", src="/vendor/jquery-minicolors.min.js")
script(type="text/javascript", src="/socket.io/socket.io.js")

当我从 nodemon server.js 开始时,node.js 控制台运行得很好

[nodemon] starting `node server.js`
connect.multipart() will be removed in connect 3.0
info  - socket.io started
Listening on port 3030...

但是,当我打开浏览器并测试应用程序时,我在控制台中看到错误

Uncaught SyntaxError: Unexpected token < jquery-minicolors.min.js:1
Uncaught SyntaxError: Unexpected token < socket.io.js:1

我只是不知道为什么会发生这些错误以及如何解决它们

谢谢

【问题讨论】:

您是否尝试过在您的 app.use(express.static(..)); 之后明确添加 app.use(app.router); ?另外,config.rootPath + '/public/socket.io/socket.io.js' 存在吗? 【参考方案1】:

这意味着 jquery-minicolors.min.js 实际上是一个 html 文档。确保路线正确。

您在 socket.io.js 上遇到了同样的错误,请确保当您点击“localhost:3030/socket.io/socket.io.js”时您确实得到了一些东西。

无论哪种方式,“意外的

【讨论】:

谢谢Brian,根据你的建议,我改用socket-io.client script(type="text/javascript", src="/vendor/socket.io-client/dist/socket .io.min.js") 而不是 script(type="text/javascript", src="/socket.io/socket.io.js") 现在出现错误“Uncaught SyntaxError: Unexpected token 修改 jquery-mincolors 的正确路径后,现在错误已修复【参考方案2】:

我正在使用 VS 2017 IDE 在浏览器上运行使用 JQuery Html 和 Css 构建的应用程序。该应用无法使用 Chrome 旋转轮运行。

我取消选中下面的复选框,应用程序开始运行。 有一天它可能会对某人有所帮助。

【讨论】:

【参考方案3】:

我在使用 node.js 设置服务器时也遇到了这个错误。问题是在 server.js 文件中,我在创建服务器之前使用 http 参数初始化了 socket.io 库。

原来如此

var http = require('http');
const io = require('socket.io', 'net')(http);
http.createServer(function(res,req) 
    ...
);

更正为:

var http = require('http').createServer(handler);
const io = require('socket.io', 'net')(http);

【讨论】:

以上是关于加载socket.io.js时Node.js“未捕获的语法错误:意外的令牌<”的主要内容,如果未能解决你的问题,请参考以下文章

未找到 Socket.io.js(node.js + express + socket.io)

Node.js socket.io.js 未找到或 io 未定义

/socket.io/socket.io.js 中不提供 Socket.io

Heroku 上的 Socket.io:客户端代码

Node.js Websockets Socket.IO

无法获取 socket.io.js