【问题标题】:Node server without Express routing, how to use path parameters没有Express路由的节点服务器,如何使用路径参数
【发布时间】:2019-03-01 13:29:42
【问题描述】:

我必须开发一个网络服务器没有 Express,我想知道是否有任何方法可以使用 Express 路由方式,例如 /path/:example,所以我可以使用 /path/test 访问它查询变量example 将是"test"

目前我只使用基本查询参数/path?example=test,但我希望能够将其减少到上述参数。

除非在 Express 中,否则这是不可能的吗?我不能使用任何路由模块。

【问题讨论】:

  • 要回答您的问题,是的,这是可能的,但是除非您告诉我们更多有关您要做什么以及为什么不能使用模块的信息,否则无法真正给出更完整的答案.这是作业吗?如果不是这样,无论您为谁构建它,都应该明白,由于不允许第三方开源库,他们错过了现代软件的大部分价值。
  • 我不太清楚为什么,但客户要求不使用 express,我假设这也意味着没有其他路由系统。 @保罗

标签: node.js


【解决方案1】:

好的,所以我坚持我的意见,即您的客户做出了不明智的决定。是的,可以在没有 Express 的情况下进行路由,但它需要更多的自定义代码并且不会提供额外的价值。此外,在同一个生态系统中有很多非常好的工具(例如头盔),它们可以让您的应用程序更好、更容易构建和维护,并且更安全。

也就是说,如果客户走上了这条疯狂的道路,并且您不想“解雇”您的客户,那么您必须这样做:

const http = require('http');
const url = require('url');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  const requestUrl = url.parse(req.url);
  const path = requestUrl.pathname;

  const parts = path.split('/').slice(1);

  // This is really brittle, but assuming you know it's going to be 2 parts remaining after the above..

  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end(parts[1]);
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

现在,这就是基础。显然,如果您想从根本上重新执行 Express 提供的路由,您将需要添加更多逻辑来处理以您想要的方式解析字符串并分配路由处理程序和所有这些东西。抱歉,这并不容易,但这就是为什么这么多人使用 Express(或 Connect,或其他路由模块)的原因。

其他一些可能会让您更轻松的事情... Express 是开源的,因此请阅读他们的源代码并了解他们如何完成您需要完成的工作,然后自己实现它。我不是说逐字复制它(如果你这样做,你不妨只使用他们的模块......),但要获得灵感。

例如,他们使用了一个名为 path-to-regexp 的实用程序,它将“/path/:example”字符串转换为可用于测试传入 URL 的正则表达式。阅读该源代码可能会帮助您了解他们在哪些方面做得更好。

【讨论】:

  • 谢谢,这有帮助,但我明白你不使用快递的意思。我只是我公司的一名实习生,我正在开发 mvp 服务器,我不太清楚为什么,但他们说其中一个想要这个产品的客户想要它没有快递。
  • 兄弟我真的很爱你
猜你喜欢
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 2016-04-11
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多