我在Linux中有以下目录结构,其中只有3个文件:
/ home / nikhil / test_img /
这是一个简单的node.js hello world设置,不使用express或任何其他库
server.js的代码
var http = require("http"), fs = require('fs');
var path = require('path');
var root = path.dirname(require.main.filename);
var filePath = path.join(root + '/page.html');
var port = 8889;
function onRequest(request, response) {
fs.readFile(filePath, function (err, html) {
if (err) {
throw err;
}
response.writeHead(200, {'Content-Type': 'text/html'});
response.write(html);
response.end();
});
}
http.createServer(onRequest).listen(port, function () {
console.log("Server has started at port " + port);
});
这只是创建了一个服务器,它在对localhost的任何请求上显示page.html:8889
page.html代码
<html>
<head><title>Page</title></head>
<body>
<h1> Hello World </h1>
<img src="pic.jpg" alt="image">
</body>
</html>
这是一个带有Hello World标题和图像的简单网页。
现在,错误是当我在浏览器上点击localhost:8889时加载页面时图像不会显示。但是,当我通过浏览器(而非通过节点)打开网页时,会显示图像。
我也尝试将src更改为
另外,我尝试使用<script>alert(document.location.pathname);</script>
印刷的路径是
/
然而,当我直接在浏览器中运行页面(没有节点)时,它是
/home/nikhil/test_img/page.html
我需要将图像文件放在哪里才能工作?
答案 0 :(得分:0)
您的代码表示每个请求都应该提供与filePath
对应的文件,即html文件page.html
。这适用于页面请求本身,但html页面中的img
标记会为图像pic.jpg
创建一个单独的请求,该请求应与页面位于同一路径中。但是,不是提供img文件,这意味着您的请求处理程序将返回带有标头Content-type: image/jpg
的内容,您的请求处理程序将再次响应html页面的内容和标题Content-Type:text/html
。
您需要根据所请求的内容区分要投放的内容。