未捕获的语法错误:意外的标记 <(来自 <!DOCTYPE html>)

新手上路,请多包涵

我收到这个指向我的声明的奇怪错误,但无法弄清楚如何解决它。

所以最初,我创建了一个小项目来帮助我学习 Web 开发。我最初将这个项目作为静态网页启动,但决定将其连接到服务器,因为我需要使用 npm api 包 (yelp-node)。这是读取我的 html 文件的服务器端代码。

https://jsfiddle.net/hgcm3w27/

 var http = require('http');
var path = require('path');
var fs = require('fs');

var verifyMimeType = true;
var port = 8000;
var serverURL = "127.0.0.1";

console.log("Starting web server: " + serverURL + ":" + port);

var server = http.createServer(function(req,res){
  // set to URL or default to index.html
  var filename = "/index.html"
  console.log("Filename is: " + filename);
  // sets the extention of the filename
  var ext = path.extname(filename);
  var localPath = __dirname;
  console.log("Local path: "+ localPath);
  var validExtentions ={
    ".html" : "text/html",
    ".js": "application/javascript",
    ".css": "text/css",
    ".txt": "text/plain",
    ".jpg": "image/jpeg",
    ".gif": "image/gif",
    ".png": "image/png"
  };

  var validMimeType = true;
  var mimeType = validExtentions[ext];
  if(verifyMimeType){
    validMimeType = validExtentions[ext] != undefined;
  }

  if(validMimeType){
    localPath += filename;
    fs.exists(localPath, function(exists){
      if(exists){
        console.log("Serving file: " + localPath);
        getFile(localPath,res,mimeType);
      }
      else{
        console.log("File not found: " + localPath);
        res.writeHead(404);
        res.end();
      }
    });
  }
  else{
    console.log("Invalid file extention detected: " + ext);
    console.log("Invalid file name: " + filename);
  }
});

server.listen(port,serverURL);

function getFile(localPath, res, mimeType){
  fs.readFile(localPath, function(err, data){
    if(err){
      console.log("Error with reading file: ("+ err + ")");
      res.writeHead(500);
      res.end();
    }
    else{
      res.setHeader("Content-Length", data.length);
      if(mimeType != undefined){
        res.setHeader("Content-Type", mimeType);
      }
      res.statusCode = 200;
      // the end does two things, it write to the response and
      // ends the response.
      res.end(data);
    }
  });
}

它抱怨的 HTML 文件:

 <html>
  <head>
   <title>En Route App.</title>
   <link rel="stylesheet" href="css/stylesheet.css">
   ....

它读取文件并正确连接到服务器,但是一旦我这样做了,它就会给我这个奇怪的错误。有点困惑,因为它说我的 scripts.js 和 yelp.js 代码是控制台日志中的 html 文档,但不是。 script.js 是包含 google map api 的文件

原文由 exAns 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 813
2 个回答

每个请求所服务的 filename 都是相同的。它只被设置一次并设置为硬编码值。

 var filename = "/index.html"

在应用程序的控制台输出中,您应该会看到每个请求的内容:

 Filename is: /index.html


您可以检索从 req.url 请求的路径,获取 它的 pathname

 var parsedUrl = url.parse(req.url);
var filename = url.resolve('/', parsedUrl.pathname);

(使用 url.resolve() 将通过向路径添加多个 ../ 来帮助避免从应用程序的公共文件夹外部检索文件的任何尝试。)


要在 URL 引用目录时也支持提供默认文件,您可以检查尾部斜杠:

 // if requesting a directory, add a default file
if (/[\/\\]$/.test(filename)) {
    filename = url.resolve(filename, 'index.html');
}

或者,一旦知道了完整的磁盘路径,就可以使用 fs.stats()stats.isDirectory() 检查它是否是磁盘上的目录,然后使用 path.join() index.html

原文由 Jonathan Lonowski 发布,翻译遵循 CC BY-SA 3.0 许可协议

你没有关闭标签头,检查这个。

原文由 Daniel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏