Node.js服务器问题-已添加“/"在浏览器中查找文件时
Node.js server issue - added "/" when looking for files in browser
我正在尝试编写我的第一个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所提到的,您必须考虑在代码中删除"/"。
你的重定向也应该很好。
相关文章:
- 防止“;jQuery(html)"防止触发浏览器请求图像和其他参考内容
- Node.js服务器问题-已添加“/"在浏览器中查找文件时
- 浏览器跳过“;如果“"否则如果“;,直接转到“;否则”;陈述
- JavaScript异常:“;不成形”;在firefox浏览器上;XMLHttpRequest"chrome浏
- 在Asp.net的空网站中,如何改变"Web.config”;使内容(.js)文件显示在浏览器中,而不是下载
- Ruby on Rails屏幕抓取错误-“;您必须在浏览器中启用javascript才能使用此应用程序"
- WebdriverIO错误:找不到模块'点击'浏览器名称:"铬”;
- style.display="块“;在所有最新的浏览器中
- "阻止跨来源请求:相同来源策略”;浏览器出错
- 得到"SCRIPT70:许可被拒绝”;仅在EDGE浏览器/JJAVASCRIPT错误的情况下
- 如何在main.js中使用"浏览器动作jplib”;
- "FB未被定义”;在互联网浏览器(Facebook API)中
- 为什么"document.styleSheets”;每次刷新3到5次浏览器后返回空值
- "缩放“;使用JavaScript的浏览器窗口/视图
- 在服务器上浏览代码:如何获得“;窗口”"位置”;以及其他“;窗口“;属性,通常是浏览器对象
- 浏览器中的观察者模式javascript:订阅事件"添加了Dom元素“;并处理这个元素
- "自动播放“;移动浏览器上的HTML5音频播放器
- 寻找搜索浏览器cookie的方法并确定href="邮件收件人:"链接
- "oneventname”;在文档浏览器支持中
- 使用'href="#"'在某些浏览器中需要2次后退