【问题标题】:Node.js server issue - added "/" when looking for files in browserNode.js 服务器问题 - 在浏览器中查找文件时添加“/”
【发布时间】:2016-05-10 13:02:12
【问题描述】:

我正在尝试编写我的第一个 Nodejs 服务器来了解 Angular/Node 并最终了解整个 MEAN 堆栈。

我的服务器正在运行,但我的代码有问题,由于某种原因,当我输入一个不存在的文件时,它应该重定向到 404,但它没有。由于某种原因,URL 出现了双破折号;

我将如何进行到 404 的重定向工作?

check this image

这是我目前的服务器代码。

var http = require('http'),
    fs = require('fs'),
    path = require('path'),
    root = __dirname + '/public/', //magic var
    mime = require('mime');


  //Server
var server = http.createServer(function (req, res) {
  // Check is root is queried
  var fileName = '';
  var url = req.url;
  if (url === '/'){
    url = 'index.html'; // redirect when no file specified
  }
  fileName = root + url;



  // check if file exists
  fs.exists(fileName, function(exists){
    if (exists) {
      serveFile(fileName); // yes
    } else {
      path = root + '404.html'; //no
      serveFile(fileName);
    }
  })
  //serve file
  function serveFile(requestFile) {
    // maak a stream based on events
    var stream = fs.createReadStream(requestFile);
    res.writeHead(200, {'Content-Type': mime.lookup(requestFile)});
    stream.on('data', function (chunk){
      res.write(chunk);
    });
    stream.on('end', function(){
      res.end();
    });
    stream.on('error', function(err){
      console.log('error: '+ err);
    });
  }
});


server.listen(3000); //server start
console.log('Server gestart op http://localhost:3000 ');
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>angular</title>

    <link href="https://cdn.jsdelivr.net/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
    <link href="styles/app.css" rel="stylesheet"/>
  </head>
  <body ng-app class="bg">
    <h1>First name?</h1>
      <input type="text" placeholder="Type your name" ng-model='firstName'
              class="input-lg"/>
              <p>
                Hi, {{firstName}}
              </p>

              <img src="https://static.pexels.com/photos/7720/night-animal-dog-pet.jpg" height="100px" width="100px"/>
  </body>
  <script type="text/javascript" src="https://cdn.jsdelivr.net/angularjs/1.5.5/angular.min.js"></script>

  <script type="text/javascript" src="https://cdn.jsdelivr.net/angularjs/1.5.5/angular.min.js"></script>

</html>

谁能告诉我这里出了什么问题? 提前致谢!

【问题讨论】:

    标签: javascript angularjs node.js


    【解决方案1】:

    公开后去掉'/'

     root = __dirname + '/public'
    

    【讨论】:

    • 您好,感谢您的回答!我确实检查了该选项,但在这种情况下,我的重定向将不起作用。我的意思是:如果我输入 localhost:3000 服务器将不会响应,因为 public/index.html 之间缺少 /。
    【解决方案2】:

    这是 Node JS 的默认行为。 IE。如果您请求 xxx.com/sample.txt,那么 req.url 将为“/sample.txt”。

    https://nodejs.org/api/http.html#http_message_url

    所以你已经考虑在你的代码中,正如@Jordan 提到的那样,删除“/”。

    您的重定向也应该可以正常工作。

    【讨论】:

    • 它确实似乎工作正常!感谢您清除此问题,我通过在 path = root + "/404.html" 欢呼声中添加“/”来修复重定向!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    相关资源
    最近更新 更多