Nodejs提供1个api端点和一个html页面

时间:2013-01-16 13:48:27

标签: node.js

这是我的问题。 我没有在使用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派上运行,这就是我不应该使用库的原因。基本上我没有多少空间。

非常感谢, ħ

2 个答案:

答案 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列表是查找此类模块的良好起点。在不使用模块的情况下使用节点有点像回到节点的早期阶段,当这些问题困扰每个人时。当然你可以做到这一点,但它已经完成了。