什么's本地node.js服务器和python简单http服务器之间的区别



我正在尝试在本地构建一个D3.js图表。所以我把csv文件和index.html放在桌面上的同一个文件夹中。当我运行我的python本地服务器时,一切都运行得很好,但当我运行带有以下代码的node.js服务器时:

var http = require('http');
var server = http.createServer(function(request, response)
    {
        console.log('test');
        response.write('test');
        response.end();
    });
server.listen(8000);

它不起作用。

所以我的问题是:python本地服务器和node.js本地服务器之间有什么区别。我应该怎么做才能让我的node.js本地服务器像我的python本地服务器一样工作?

使用Express

节点中的服务器是正确的,但它将始终以test的形式发送响应。由于您需要为项目的静态文件提供服务,因此可以使用express。

server.js

var express = require('express');
var app = express();
app.use(express.static('public'));
app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

假设您的文件位于名为public的文件夹中。并且具有类似的结构。

|package.json
|server.js
|public
  - files 

python SimpleHTTPServer之所以工作,是因为它托管当前目录(从任何地方调用)

如果您不想使用express你可以使用纯node.js创建它。这是我发现有用的的要点链接

var http = require("http"),
    url = require("url"),
    path = require("path"),
    fs = require("fs")
    port = process.argv[2] || 8888;
http.createServer(function(request, response) {
  var uri = url.parse(request.url).pathname
    , filename = path.join(process.cwd(), uri);
  path.exists(filename, function(exists) {
    if(!exists) {
      response.writeHead(404, {"Content-Type": "text/plain"});
      response.write("404 Not Foundn");
      response.end();
      return;
    }
    if (fs.statSync(filename).isDirectory()) filename += '/index.html';
    fs.readFile(filename, "binary", function(err, file) {
      if(err) {        
        response.writeHead(500, {"Content-Type": "text/plain"});
        response.write(err + "n");
        response.end();
        return;
      }
      response.writeHead(200);
      response.write(file, "binary");
      response.end();
    });
  });
}).listen(parseInt(port, 10));
console.log("Static file server running atn  => http://localhost:" + port + "/nCTRL + C to shutdown");

您完全在尝试两件不同的事情,python和node都打开了一个套接字并监听http通信,然而,node需要以下配置:

const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello Worldn');
});
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

然后从命令行:

node example.js

简单地说,这两个脚本都创建了一个监听连接的套接字,我甚至鼓励您同时运行它们,这样您就可以了解发生了什么。

PythonHTTP使用Python库来创建和侦听,node使用不同的库。

最新更新