Node.js服务器问题-已添加“/"在浏览器中查找文件时

Node.js server issue - added "/" when looking for files in browser

本文关键字:quot 浏览器 文件 查找 问题 服务器 js 添加 Node      更新时间:2023-09-26

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

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

我该如何将重定向到404?

检查此图像

这是我迄今为止为服务器编写的代码。

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>

有人能告诉我这里出了什么问题吗?提前感谢!

在public:之后清除'/'

 root = __dirname + '/public'

这是NodeJS的默认行为。例如,如果您请求xxx.com/sample.txt,则req.url将为"/sample.txt"。

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

因此,正如@Jordan所提到的,您必须考虑在代码中删除"/"。

你的重定向也应该很好。

相关文章: