为啥前端要会使用Nodejs

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥前端要会使用Nodejs相关的知识,希望对你有一定的参考价值。

你熟悉javascript
假设你正在使用一个功能强大的客户端框架(Angular,Ember,
Backbone)以及REST-ful服务器端的API,使用JSON这种数据格式来传输和接受数据。即使你没有使用其中的任一种框架,你也用jQuery写过自己的框架。因此如果你不在服务器端使用Node.js,那么你就不断地做转译吧。你在转译两件事:
来自你脑中JavaScript的逻辑转换为服务器端框架的逻辑。
来自JSON的HTTP数据转换为你的服务器端的对象。
JavaScript贯穿着你的应用,你不但智力上涨,你也获得了实践经验。通过模型和模板的复用,你可以减少应用的大小,同时减少了复杂度和出现bug的可能性。
它很快
Node.js是JavaScript运行环境,使用了Google用在Chrome中的V8引擎。V8以闪电般的速度编译和执行JavaScript是因为V8将JavaScript编译成本地机器代码。包括网络连接的读写,文件系统的读写,以及数据库的读写——所有的在网页应用中的日常任务——在Node中执行地非常非常快。Node能让你创建快速,大规模的网络应用,能够处理高吞吐量的大量的实时连接。
工具
npm是Node.js的包管理器并且它棒呆了。这确实很棒,当然,这类似于其他生态系统的包管理器,但是npm很快很稳很一致。他在寻找和安装项目依赖做的非常好。他让包和其他的项目隔离开来,防止版本混淆。
实时变得简单
如果Node.js很擅长多并发连接,那么他也擅长多用户的,实时的网页程序,例如聊天室和游戏。Node的
event loop
能够满足多用户需求。实时能力使用websocket协议。Websocket是在客户端和服务器端的简单的双向沟通渠道。因此服务器能够推送数据到客户端就像客户端推送一样。websocket运行在TCP,避免了HTTP的消耗。
流数据
传统意义上来说,web框架将HTTP请求和响应当做一个整体的数据对象。实际上,他们是I/O流,你可以想象,如果你把文件从文件系统中以流的形式取出。既然Node.js非常擅长处理I/O,我们能够利用这个特点创建一些很酷的东西。比如,它能够当视频或音频文件上传的时候,就转码音频或视频文件,减少了整体处理的时间。
一个代码库和免费的实时
Meteor是下一代基于Node的web框架。他可以在客户端和服务器端运行相同的代码库。然后,数据自动保存在服务器。其他的方式也奏效!任何服务器上的数据都自动传到客户端。
参考技术A 没有强制要求一定要会使用,只是说js你会的差不多了,再学习nodejs 会很快,所以这种顺手的事一般就一块干了。
学会了nodejs,以后前端可以自己搞后台啊
开发中也可以用他做压缩、编译、打包之类的工作
说不定公司就是要求用nodejs开发呢?
参考技术B nodejs迟早都是前端 你会我会 大家会的东西,早学比晚学好

NodeJS,Express,我为啥要使用 app.enable('trust proxy');

【中文标题】NodeJS,Express,我为啥要使用 app.enable(\'trust proxy\');【英文标题】:NodeJS, Express, why should I use app.enable('trust proxy');NodeJS,Express,我为什么要使用 app.enable('trust proxy'); 【发布时间】:2017-02-17 05:02:45 【问题描述】:

我需要将 http 重定向到 https 并找到此代码:

app.enable('trust proxy');
app.use((req, res, next) => 
    if (req.secure) 
        next();
     else 
        res.redirect('https://' + req.headers.host + req.url);
    
);

我正在使用 heroku 来托管我的项目,我注意到 heroku 默认发布了*.herokuapp.com 证书,所以我也可以使用 http 和 https。

当在app.use 回调中查看req.secure 时,没有app.enable('trust proxy')req.secure 始终是false,当我添加app.enable('trust proxy') 时它大约为错误2 次,在https 重定向之后它的开关到true

app.enable('trust proxy'), the docs:

表示应用程序位于前置代理之后,并且要使用 X-Forwarded-* 标头确定连接和 IP 地址 客户的。

我的问题:

为什么我的服务器会在代理之后?(它与颁发的*.herokuapp.com 证书有关吗?),如果有人可以解释所有内容如何组合在一起,我的意思是,为什么我的服务器在代理之后?为什么没有app.enable express 将无法识别(或接受)安全连接?

【问题讨论】:

如果您不在代理后面运行,则不需要。例如,如果您在服务器上运行多个网站,您可能会使用代理。执行此操作时会添加 X-Forwarded-For 标头属性,以便您的代理可以看到原始 url 是什么,最终代理将转到您看到的 localhost。需要它的原因是 X-Forwared-For 可以伪造,没有什么可以阻止客户端添加这些,而不仅仅是代理。所以信任代理应该只在接收端启用,这将在你的防火墙后面。因为你有控制权,所以你不能信任。 @Keith 将其发布为答案,如有必要,提供反向链接:) @Keith 你真的应该发布一个答案,这样我才能接受它,顺便说一句,req.secure 在没有app.enable('trust proxy') 的情况下是false 的原因是内部(在防火墙后面)之间代理和我的服务器通信不安全? @AvielFedida 好的,完成。我现在在我的反向代理上执行所有 SSL 并强制使用 SSL,因为谷歌也会更好地排名 SSL。所以我从来不需要检查 req.secure,因为我基本上在端口 http:80 -> https:443 上有一个完整的重定向。我在反向代理上这样做的另一个原因也是为了性能,它允许反向代理处理加密,我的快速服务器也不需要。 【参考方案1】:

如果您没有在代理后面运行,则不需要。例如,如果您在服务器上运行多个网站,您可能会使用代理。

执行此操作时会添加 X-Forwarded-For 标头属性,以便您的代理可以看到原始 url 是什么,最终代理将转到您看到的 localhost。需要它的原因是 X-Forwared-For 可以伪造,没有什么可以阻止客户端添加这些,而不仅仅是代理。所以信任代理应该只在接收端启用,这将在你的防火墙后面。因为你有控制权,所以你可以相信这一点。

因此,简而言之,如果您的网站在代理后运行,您可以启用它。如果您的网站直接在端口 80 上运行,则您不想信任它。因为发件人可以假装来自本地主机等。

【讨论】:

最后一行符合我的要求

以上是关于为啥前端要会使用Nodejs的主要内容,如果未能解决你的问题,请参考以下文章

为啥要用nodejs

学习HTML5前端,要会哪些知识点和技能?

为啥要用nodejs服务

前端开发注意啦!一定要会的DOM基础操作(上)

闻一以知十,前端要会的10道面试题(附答案与解析)

闻一以知十,前端要会的10道面试题(附答案与解析)