【问题标题】:'Uncaught SyntaxError: Unexpected token <' in Node.js'Uncaught SyntaxError: Unexpected token <' in Node.js
【发布时间】:2015-12-05 13:00:00
【问题描述】:

我在尝试提供客户端代码时收到以下屏幕截图错误。当我尝试运行node server/server.js:

以下是我的 server.js 代码...

app.use(express.static(path.join(__dirname, "public")));
app.use(logger('dev'));
app.use(bodyParser.json({limit: '50mb'}));

app.all('/*', function(req, res, next){
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS");
    res.header("Access-Control-Allow-Headers", "Content-type,Accept,X-Access-Token,X-Key");

    if(req.method === 'OPTIONS'){
        res.status(200).end();
    } else {
        next();
    }

});

app.all("/api/v1/*", [require('./middlewares/validateRequest')]);
app.use("/", require("./routes"));

app.use(function(req, res, next){
    var err = new Error("Not found");
    err.status = 404;
    next(err);
});

在我的routes/index.js 中,get request 有以下内容。

router.get('*', function(req, res) {
    res.sendfile('./public/index.html');
});

【问题讨论】:

  • 看起来它正在读取 HTML 文件而不是 JavaScript 文件。您是否为 jQuery 获取了正确的 JavaScript 文件?检查网络选项卡。
  • Chrome:检查网络标签。 Firefox:检查网络选项卡。查看 jQuery 请求的响应。
  • @PraveenKumar:它在网络选项卡中加载 html 文件而不是 javascript 文件......为什么会这样? localhost:3000/assets/libs/jquery/jquery.min.js这不是指向js文件,而是index.html...查看源码
  • @ShankarGuru — 它正在提供 HTML 文件,因为您告诉它这样做。看你的路线。 res.sendfile('./public/index.html');
  • @Quentin:为什么不提供 index.html 中包含的 js 文件...

标签: javascript node.js express


【解决方案1】:

通常当浏览器请求一个 JavaScript 文件时,服务器会发送一个 HTML 文件。这是由于 app.get('*'... 之类的规则。所以我们需要告诉服务器先发送静态文件,然后再声明规则,如下图:

// Declare static folder to be served. It contains the JavaScript code, images, CSS, etc.
app.use(express.static('build'));

// Serve the index.html for all the other requests so that the
// router in the JavaScript application can render the necessary components
app.get('*', function(req, res){
  res.sendFile(path.join(__dirname + '/build/index.html'));
  //__dirname : It will resolve to your project folder.
});

【讨论】:

  • 为我工作,只需确保将“构建”更改为包含客户端 js、css 等的根公共文件夹。
  • ReferenceError: 路径未定义
  • 确保app.use(express.static('build')) 位于您的路线之前(与上面的示例完全相同,即使您可能已将其粘贴在您的路线下方)
【解决方案2】:

我的文件夹结构

node(folder)
     server.js
     -client(f)
           -index.html
           -views(f)
           -js(f)
              -ctrl(f)
              -service(f)
              -app.js
              -state.js

app.use(express.static('client'));
app.get('/index.html', function (req, res) {

  res.sendfile(_dirname + '/index.html');

});

从浏览器调用:http://127.0.0.1:1956/index.html

var server = app.listen(1956, function (req, res) {
    var host = server.address().address
    var port = server.address().port
    console.log("app listening at", host, port)
});

对我来说效果很好。

【讨论】:

  • 谢谢!本质上,我们需要指向包含 js、css 等静态文件的目录。
【解决方案3】:

我认为这可能是由您的 /public/index.html 文件引起的。

当您在 index.html 文件中包含 JavaScript 文件时,“src”属性存在一些问题。因此它将返回一个“未找到”的 HTML 文件,而不是实际的 JavaScript 文件。

【讨论】:

    【解决方案4】:

    我找到了解决方案。 Node.js 应用程序试图编译公用文件夹中的 JavaScript 文件,这会出错;您这样定义公用文件夹:

    app.use(express.static(path.join(__dirname, 'public')));
    

    尝试通过添加特定的虚拟文件夹名称来使用虚拟目录来定义它,如下所示:

    app.use('/static', express.static(path.join(__dirname, 'public')));
    

    这应该可行;

    【讨论】:

      【解决方案5】:

      我猜部分问题出在你的router

      在您的routes/index.js 中将get 请求更改为

      router.get('/', function(req, res) {
          res.sendfile('./public/index.html');
      });
      

      您是否还在使用gulp 或类似的方式对资产进行管道处理?如果没有,那么您如何为您的资产服务?

      我建议您使用serve your assets statically 或使用gulp

      【讨论】:

      • 我没有使用 gulp 对我的资产进行管道传输....事实上,我认为提供 index.html 也会为 js 文件提供服务...我应该单独包含 js、css 文件吗?我的意思是他们的道路......
      • 不,不会。我建议您静态地提供资产expressjs.com/en/starter/static-files.html 或使用gulp
      • 我已经做对了,app.use(express.static(path.join(__dirname, "public")));在提供 index.html 时它是否应该不返回公共目录中的所有文件
      • 您是否尝试将路由器从 * 更改为 / ??
      猜你喜欢
      • 2018-01-07
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      相关资源
      最近更新 更多