使用 Node.js 制作网站,无需框架

Posted

技术标签:

【中文标题】使用 Node.js 制作网站,无需框架【英文标题】:Making website with Node.js without framework 【发布时间】:2018-06-15 17:10:40 【问题描述】:

我想创建一个基于 node js 和 mysql 的网站,但我读到有一个名为 express for node js 的框架,我想知道我是否必须使用这种框架来创建一个不错的网站,或者没有它也有可能,只需使用纯节点 js。

【问题讨论】:

为什么不想使用框架? 【参考方案1】:

您不必使用框架,但建议您使用其中之一,因为 Express 等框架在许多方面让您的生活更轻松。检查这个:What is Express.js?

【讨论】:

你能告诉我框​​架中使用的路由是什么吗? 您可以从这里查看:expressjs.com/en/guide/routing.html 它基本上可以帮助您了解如何相应地响应客户端。 你看,这是一个典型的 Node.js 新手 Express 的人会永远问的问题。 Express 被编码为处理 Node.js 的运行方式,并且它以当今 javascript 允许的最复杂的方式进行处理。但是 Express 没有提供详细的解释,也没有详细解释它为什么会这样编码。所以想要实现类似效果的学习者只能复制他在某处看到的Node-Express代码示例。那里没有真正的学习经验。最好先在没有 Express 的情况下学习 Node.js。【参考方案2】:

不需要框架。您可以只使用 http 模块编写一个成熟的 Web 服务器,或者如果您真的想自己编写所有内容,您甚至可以只使用 net 模块来完成。

这真的是关于最有效地利用您作为开发人员的时间和技能的方法。除了学术或纯学习经验的原因,如果您只是想尽可能高效地完成一项任务,并且存在免费的、预先存在的、预先测试过的代码可以让您的工作更轻松,那么这是一个更好的方法。

例如,如果我需要将文件从浏览器上传到后端,并且数据以 multipart/formdata 内容类型从浏览器传入,那么我对阅读和学习 multipart 的兴趣为零/formdata RFC 然后编写我自己的代码来解析 multipart/formdata 内容类型。现有的,已经测试过的代码可以为我做到这一点,我通过重新实现然后自己测试它并没有为我的项目目标增加任何价值。因此,我想使用一个预先构建的模块来为我完成所有这些工作。我可以在正确的路径上配置正确的库,然后在理解第 3 方模块的接口以及如何正确使用它所需的时间内完成我上传的文件。

这就是 Express 的用武之地。它不仅提供了一组有用的功能和架构,用于配置路由、安装中间件、发送响应、使用模板引擎、处理错误等......而且还有成千上万的三分之一为连接到 Express 而构建的派对模块,如果您使用 Express 作为核心框架,使用它们是最容易的。其中一些模块可以在 Express 之外使用,有些则不能 - 这实际上取决于它们的设计方式以及它们使用或不使用的 Express 接口。

此外,Express 相当“无主见”且相当“轻量级”,这意味着它不会强迫您采用特定的方法。它只是为您提供了更简单的方法来完成您已经必须为自己编写代码的事情。

这样看。当您获得 node.js 时,有成千上万的 API 提供了许多已经测试过的东西,例如 TCP 库、文件 I/O 库等……这些也是框架(在某种意义上)。您也不必使用它们。您可以从头开始重写您需要的任何功能。但是,您甚至不会考虑这样做,因为已经存在可以解决您的问题的测试代码。因此,您很乐意在已经完成的事情上进行构建。

使用 node.js 编码的一大优势是可以访问 NPM 上数以万计的预构建模块,这些模块已经解决了许多人遇到的问题。以永远不会使用 NPM 的任何外部模块的心态在 node.js 中进行编码正在抛弃使用 node.js 进行编码的最大优势之一。

你能告诉我框​​架中使用的路由是什么吗?

路由是您希望网络服务器响应的 URL。因此,如果您希望 http://myserver.com/categories 成为您的服务器响应的 URL,那么您可以为 /categories 创建一个路由,以便您可以编写代码来处理请求该 URL 时应该发生的情况。像 Express 这样的框架允许您只用一个语句就可以非常简单地创建该路由,例如:

app.get('/categories', function(req, res) 
    // put code here to handle that request
);

这只是 Express 支持的冰山一角。它允许您在路由定义中使用通配符、识别 url 中的参数、创建对大量路由进行准备工作的中间件(例如检查用户是否已登录)等等......

【讨论】:

...但它也为在 NPM 上使用数以万计的预构建开源模块来解决常见问题打开了大门。 您可以使用可用的 npm 模块如果没有 Express,只需将它们安装到您自己的自定义模块中即可。此外,我们也不应低估任何事物本身的学习经验的重要性。如果我们这样做,我们将错过在有利的地方使用它可能带来的好处——以及当我们不了解它的局限性时的失败。没有 Express 的 Node 教程:itnext.io/…【参考方案3】:

是的,您可以编写基于 Node.js 的后端,而无需任何后端实现框架,例如 Express。如果你是第一次使用 Node.js,之前没有任何异步编码经验,我建议不要为你的简单学习应用程序使用 Express、KOA 或其他 Node 实现框架(例如,那些需要注册/登录表单处理等内容的应用程序) 、注销按钮、数据库的用户偏好更新等)因为:

(1) Node.js 是 JavaScript 后端的核心技能

服务器任务和餐厅服务员之间的愚蠢类比对于真正的网络工程师来说毫无用处。您必须首先准确地了解 Node 在服务器 CPU 中可以/不能做什么,这使得它不同于大多数其他后端技术。然后你必须看看如何 Node 进程实际上是这样做的。使用 Express/KOA/Hapi/etc 有时您可以有效地消除 Node 后端带来的心理挑战。任何节省时间都是以正确理解 Node 是什么以及它的实际运作方式为代价的。

(2) 学习 Node.js 及其异步编码已经够难了,而且不用像 Express/KOA 这样的未知框架,假设用户熟悉回调函数和 Promises 等 JavaScript 结构,从而增加编码的复杂性。孤立地学习一些东西总是更好,这样您就可以了解其个别效果的本质,而不是与其他包/框架一起使用时的整体效果。如此多的 Node.js Express 教程相当于通过观看妈妈做蛋糕来学习制作蛋糕的软件。我们可以复制它,但我们不知道它是如何或为什么起作用的。专业编码人员不能只是好的模仿者。

(3) 使用 Express 的可用学习教程通常会引入其他技术,例如 MongoDB、Mongoose、Mustache、Handlebars 等,这使得学习 Node.js 更加尴尬。

(4) 使用 Node.js、自定义 JS 和从 npm 存储库导入的现有 JS 模块,而不是使用 Express,可以更有效地编写一部分基本 Web 应用程序。

(5) 一旦清楚地理解了异步编码和可用于协助它的 JavaScript 构造,用于基本任务的纯 Node.js 应用程序就不那么难了。

(5)你确实了解了 Node.js 并且可以使用服务器端 JavaScript 结构获得基本的 Web 应用程序功能,然后你可以明智地开始探索 Express/Hapi/KOA/etc 并了解在执行需要大量功能的大型项目时,实施框架可以为您的工作流程做些什么。至此,您知道 Express 代码应该做什么以及为什么要这样完成。

在过去 10 年中,Node.js 已成为大多数中小型 Web 应用程序的首选后端技术。这也是 JavaScript 语言从具有有限的 Java 类似结构的单纯前端脚本工具发展到今天的创新和综合语言的主要原因。它也是当今使用最流行的语言。花时间来理解 Node 服务器框架和 Node 中使用的最新 JavaScript 结构是值得的。在 Node.js 平台上编写更精细的后端时,Express、KOA、Hapi、Sails 等实现框架有很大的好处。但是所有这些实现框架都基于 Node.js 的行为模式。因此,除非先了解 Node 本身,否则将永远无法享受 Express/KOA/Sails/etc 的全部实用程序。

为纯 Node.js 尝试 here。

【讨论】:

以上是关于使用 Node.js 制作网站,无需框架的主要内容,如果未能解决你的问题,请参考以下文章

node.js+mongodb 爬虫

Nuxtpress - Node.js 动态网站静态化之路

带有 Node.js 的 Socket.io

使用 Node.js 与 PHP 有啥优势 [重复]

使用 Node.js 与 PHP 有啥优势 [重复]

hexo常用命令