这是我的问题。 我没有在使用express的情况下在节点中写东西,所以我发现用基本API创建服务器很困难。
基本上我在互联网上找到的是:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
但是我没有看到我如何实现/index.html和/ getData。这段代码将在Raspberry派上运行,这就是我不应该使用库的原因。基本上我没有多少空间。
非常感谢, ħ
答案 0 :(得分:9)
您需要手动检查请求中的URL并分别处理每个案例:
var http = require('http');
http.createServer(function (req, res) {
if(req.url == "/index.html") {
fs.readFile("index.html", function(err, text){
res.setHeader("Content-Type", "text/html");
res.end(text);
});
return;
}
if(req.url == "/getData") {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('get data\n');
return;
}
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
答案 1 :(得分:1)
仅仅因为代码在Pi上运行并不意味着你不能使用模块。模块不一定占用过多的空间。您仍然必须编写许多模块为您编写的相同代码。像Express这样的模块专门用于解决您所面临的实现问题,因此您必须重写路由器以处理/getData
的请求或文件读取器以处理静态资产(如HTML)。无论您是否使用模块,您最终都会得到大约相同数量的代码。
不是重新创建轮子,也许你只需要剥去你不需要的功能的更薄的模块。 Express基于的Connect相当小。使用Express或Connect,您可以删除不需要的内容。请记住,模块只是项目根目录中的node_modules
子目录,因此您可以删除多余的内容,例如测试,示例和(在某些情况下)您不需要的功能。
或者,有许多更简洁的模块,如send,它纯粹用于提供像索引页一样的静态内容。仅提供JSON的Journey也是精益功能集。关键是如果Express太大,有大量模块可以满足特定需求。 node modules列表是查找此类模块的良好起点。在不使用模块的情况下使用节点有点像回到节点的早期阶段,当这些问题困扰每个人时。当然你可以做到这一点,但它已经完成了。