4

这是我的问题。我从来没有在不使用 express 的情况下在 node 中写过东西,所以我发现很难用基本的 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。这段代码将在树莓派上运行,这就是我不应该使用库的原因。基本上我没有太多空间。

非常感谢,h

4

2 回答 2

12

您需要手动检查请求中的 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/');
于 2013-01-16T13:58:18.693 回答
1

仅仅因为代码在 Pi 上运行并不意味着您不能使用模块。模块不一定占用过多的空间。您仍然必须编写许多模块为您编写的相同代码。像 Express 这样的模块专门用于解决您面临的实现问题,因此您必须重写路由器来处理对/getDataHTML 等静态资产的请求或文件阅读器。无论您是否使用模块,您最终都会得到大致相同数量的代码。

与其重新创建轮子,也许您只需要去掉不需要的功能的更纤薄的模块。Express 所基于的Connect相当少。使用 Express 或 Connect,您可以删除不需要的内容。请记住,模块只是node_modules项目根目录中的子目录,因此您可以删除无关的内容,例如测试、示例和(在某些情况下)不需要的功能。

或者,还有许多更精简的模块,例如send,它们纯粹用于提供静态内容,例如您的索引页面。Journey仅提供 JSON,也是一个精简的功能集。关键是如果 Express 太大,有大量模块可以满足特定需求。节点模块列表是查找此类模块的良好起点。在不使用模块的情况下使用 node 有点像回到 node 的早期,当时这些问题困扰着每个人。当然你可以这样做,但它已经完成了。

于 2013-01-16T14:20:51.653 回答