我正在尝试在本地构建一个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使用不同的库。