node.js怎么获取访问者的内网ip?

发布时间 : 08-03

臣妾做不到

不仅是Nodejs做不到,任何网络技术都不能做到

因为访问者的内网ip,在经过路由器的时候会做 网络地址转换(NAT),经过转换的IP已经是公网IP了,所以只能获取到访问者公网的IP.

Nodejs获取客户端公网IP的方法主要分为这几种情况:

Nodejs直接暴露服务

反向代理因为中间加了一层反向代理转发,所以req.socket.remoteAddress

只能获取道反向代理的IP,这不是我们想要的.所以需要在反向代理转发数据时增加一个,这里以nginx为例,需要配置:

proxy_set_header X-Real-IP $remote_addr

在Nodejs可以使用X-Real-IP头获取IP

在多层反向代理中需要除了暴露在公网的nginx设置x-real-ip头,其他后面都不要设置

如何收集Node中的错误信息?

上面那位同学已经讲到一点了,我这边再补充下。

对于错误日志的收集,需要分为两步:

框架日志功能日志功能你可以使用几个比较流行的库:log4js 、winston 等。下面我说下 log4js 怎么用:

定义工具类:

定义 log4js 配置:

使用:

这样你就能收集到日志信息了,注意如果是错误信息,请用 logger.error('') 来定义。

如果你有兴趣,可以看下 log4js 的相关文章:

://eminoda.github.io/2019/10/22/pm2-log4js-cluster-mode/错误信息的捕捉我们知道 nodejs 里有 process 内置模块,如果进程中遇到哪些没有 try-catch 的错误,就可以通过 process 提供 event 事件来做最后的“防护”,避免系统 crash 掉。

示例:

uncaughtException 是 process 提供的异常抓取事件。

我是【前端雨爸】,可以关注我,查看前端技术相关文章。

Python和nodeJS哪个更适合做爬虫?

实际上什么语言都可以爬虫,我试过用C 、Java和Python写过爬虫去爬取各大门户的网站,复杂程度:C >Java>Python。

nodeJS当然也可以写爬虫,但我更推荐用Python写爬虫,最主要的原因是库多,requests,xml,beautifulsoup,selenium,scrapy等都是爬虫利器,只要几行代码就可以实现大部分功能。

实际上爬虫写到后面关注的是效率和防爬攻防的问题,如随机headers处理、IP代理池,验证码识别等,需要在这些细节上去考量。

如果对学习人工智能和深度学习感兴趣,你可以订阅我的头条号,我会在这里发布所有与算法、机器学习以及深度学习有关的有趣文章。

Node.js做Web后端优势为什么这么大?

我是工作8年的软件开发工程师,其中6年前端开发,2年ASP.NET开发,深刻体会前后端技术的变革,特别是Node.js带来的巨大变革优势。

随着前端技术的发展,JavaScript语言更新换代,语法更加优雅,功能逐渐强大,重视度不断提升。特别在ES5(EcmaScript)标准化JavaScript第5版的出现,JavaScript语言发展到了巅峰时期,这时候逐步从webkit浏览器内核ChromeV8JS解析引擎孵化出了Node.js:能够支持使用JavaScript语言开发应用的运行时环境,提供与后端能力媲美的服务处理功能。

因此,由于Node.js源自前端JavaScript语言诞生,具有很多独特的优势:

满足标准化后端输出的各种请求、响应场景前端资源处理的支持度高共享前端js周边生态支持单页面应用的SSR服务端渲染满足标准化后端输出的各种请求、响应场景浏览器标准化数据请求、响应报文。当前主流前后端分离的web应用开发,细分为前端页面渲染和后端API输出响应报文。其中前端最终是可以作为静态资源发布,而后端需要提供响应的报文。在web通信方面,提供的一种标准是restful,即GET、POST、PUT、PATCH、DELETE,增删改查的}

Node.js提供与后端一致标准化的的、response对象,同样可以输出后端能够输出的各种场景报文场景。

前端资源处理的支持度高与其他后端语言相比,Node.js能够搭配插件具备独特有效进行前端资源处理的能力。比如,通过webpack插件,能够对需要对js文件进行逻辑处理、合并、压缩处理后再输出,基于Node.js很方便使用js的方法进行处理,但其他语言很难针对js资源内部进行处理。

共享前端js周边生态Node.js开发应用时,可以使用各大社区提供的js资源,有效实现所需业务需求。在JavaScript领域,是有世界范围内较好的技术生态社区支持的,如npmjs社区,开发者可以通过社区提供的共享资源,减少开发成本,提高生产力。

支持单页面应用的SSR服务端渲染React、Vue单页面应用首次加载白屏问题。当下主流的开发模式为:前端使用如React、Vue开发的单页面应用前端项目,后端为Java等面向接口输出的项目,两者有机统一。而随着单页面项目的发展,客户端渲染成本越来越高,首次加载会出现一直白屏问题。因此,我们需要服务器渲染技术ServerSideRender(SSR)。

Node.js友好支持SSR服务端渲染。前端的单页面应用项目,经过简单改造后能够支持SSR服务端渲染。这种技术的好处是:既能符合SEO搜索引擎友好,又能避免首屏白屏问题。例如,React的服务端渲染框架Next.js,Vue的服务器端渲染框架Nuxt.js,都是基于Node.js为基础的优秀解决方案。

Node.js发展方向基于Node.js为基础的衍生框架的日益发展。这几年的前端发展历程中,产生了很多基于Node.js平台为基础衍生的各种插件、框架,Node.js推动了前端在前端工程化、服务端能力的发展。比如:企业级中后台框架eggjs,方便进行开箱即用的基于Node.js为基础的服务端框架,方便了很多中小企业快速低成本开发中后台项目的需要。

Node.js衍生分支deno逐步支持JavaScript、TypeScript编译。随着前端工程化、标准化的演进,越来越严谨、标准。于是TypeScript语言应运而生,提供强类型、面向对象等优秀特性。而Node.js官方团队逐步衍生出分支软件deno,天然支持JavaScript和TypeScript。Node.js越来越推动标准化、工程化发展。

写在最后Node.js能够天然支持JavaScript语言,对前端友好,满足标准化后端输出、优秀的前端资源处理能力、共享前端js周边生态和支持单页面应用的SSR服务端渲染等众多特性,决定了与其他后端框架的不同。对于需要前后端配合的项目,Node.js具有大的优势,是值得深入研究的优秀框架。

以上是我的观点,希望对你有所帮助。

文章推荐:

node.js怎么获取访问者的内网ip?

使用js实现的简单拖拽效果?

post请求的提交数据方式有(请在微信客户端内提交验证)

在html中怎么使用转义字符啊?

web页面代码高亮显示使用Prettify方法总结