使用没有任何框架的节点 js 的简单导航

simple Navigation using node js without any frameworks

当我在 app.js 中阅读 "login.html" 时,它有两个 href 链接(登录和注册)应该重定向到提供的位置,但是当我点击它们时它没有发生? 这是代码

var http = require('http');
   var fs = require('fs');       
http.createServer(function (req, res) {

  fs.readFile('./login.html' , function(err, data){


if(err){
    console.log(err);
}


console.log("sanjay");


res.end(data);
}); 



}).listen(3000);
console.log('Server running at http://<workspace-url>/');

"login.html"

<html>
<head>

</head>
<body>


<ul>

<li><a href="index.html" >login</a></li>
<li><a href="index.html">signup</a></li>

</ul>



</body>




</html>

nodejs 服务器不会自动提供任何文件。您有提供服务 login.html 的代码,但没有提供任何其他文件的代码。因此,在编写您的服务器时,所有请求都将服务于 login.html,无论请求的是什么 URL。

如果您想坚持使用现有的纯 http 服务器,则必须查看 req 参数以查看请求的路径是什么,然后提供适当的文件。但是,有一些像 Express 这样的简单框架,可以更简单地使用一行代码来提供大量静态 HTML 文件。

请求对象是 documented here,如果您想查看 url 请求的内容然后提供相应的文件,您可以查看 req.url

我个人建议您使用 Express framework,其中您可以使用 express.static() 功能通过一行代码为您的静态 HTML 文件提供服务。

您的 app.js 文件仅服务于 login.html,它不处理 index.html 的请求。

您可以像这样修改app.js:

http.createServer(function (req, res) {
  if (req.url === '/index.html') {
    fs.createReadStream(__dirname + '/index.html').pipe(res)
  } else {
    fs.createReadStream(__dirname + '/login.html').pipe(res)
  }
}).listen(3000)