node.js 写的 js 代码和 html 内嵌的 js 代码有什么区别?

本贴最后更新于 2091 天前,其中的信息可能已经时过境迁

nodejs 到底是干什么的只是单纯的提供 rest 请求的数据?能否指定前端标签进行类似 dom 的指定数据渲染呢 ?用 nodejs 写的后端项目如何部署,前端和 node 交互式通过 ajax 吗?node 写的 js 和前端内嵌的 js 有什么区别?假如这样的项目开发完了,java 作为后台肯定需要(jre 还有 Tomcat),html 还有 css 文件放到 Nginx 上,那其他的呢,尤其是用 node.js 写的 js 放到什么地方?

  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 268 回帖 • 88 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    7551 引用 • 34369 回帖 • 198 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • wuhongxu 1 1 赞同

    nodejs 你完全可以和前端区分开来看,你把 nodejs 当做另外一门语言(例如 java)。这样你就好理解多了,以下我直接说明用 java 作为 nodejs 的别名,看着别扭的话,你就换成 nodejs 就行了。

    nodejs 到底是干什么的只是单纯的提供 rest 请求的数据?

    java 是一门后端语言,不仅仅可以提供 rest 服务,你可以用在任何地方,然后浏览器的编程语言仅仅只识别 js(先计较 applet,凉都凉了),所以 java 不能在浏览器上运行。你完全可以用 java 做一个 js 渲染引擎,只要你够强。

    能否指定前端标签进行类似 dom 的指定数据渲染呢 ?

    什么意思,没看懂

    前端和 node 交互式通过 ajax 吗?

    js 和 java 交互一般通过 http,因为一般情况我们接触最多的就是浏览器 <-> 服务器模式,所以是由浏览器端的 js 执行 ajax 请求服务器端的 java 数据,然而实际上还有种东西叫模板引擎,你可以通过模板引擎由服务器渲染出指定的 js 代码到浏览器端。

    node 写的 js 和前端内嵌的 js 有什么区别?

    你可以用 java 进行 js 脚本本身的预处理,特别强调一下 java 和 js 不互通,不能够直接进行语言层面的交互,例如函数调用(当然可以用中间件的形式,那也不算语言层面的交互了)。在很久很久之前,没有 nodejs 的时候,前端工程化使用的是 maven 之类的(正式 java 现在的流行的工程化工具)。js 语言本身只是脚本,例如本来的文件只是 var abc = 1;abc += abc;console.log(abc),但是你可以使用 java 写一个程序压缩代码,变成 var a = 1;a+=a;console.log(a);,使得代码更短小,前端加载的带宽压力减小,而这样一个过程需要你编写前端运行的 js,然后运行一次 java 程序来压缩它。当你需要解决前端更多的问题时,比如你想自动解决兼容性,所以你可以使用 java 编写一个兼容性处理程序,实际上就是往 js 文件里面塞入一些 js 的 polyfill 脚本,这些 js 在服务器端就只是字符串,没有任何特殊意义。只有当服务器把这个 js 发送到客户端的浏览器上的,这些代码才会生效。当你有越来越多的需求,你就需要更多的 java 程序,来帮助你自动处理这些 js 文件,让很多编写过程直接省略变成一次自动处理过程(后来越来越复杂,现在基本也叫做编译了)。所以这个问题总结就是,你的 java 可以用来做 js 代码的编译器,帮助你自动解决一些 js 代码的问题,例如压缩。

    假如这样的项目开发完了,java 作为后台肯定需要(jre 还有 Tomcat),html 还有 css 文件放到 Nginx 上,那其他的呢,尤其是用 node.js 写的 js 放到什么地方?

    java 代码本身不是计算机可识别的机器码,所以不能直接运行,需要虚拟机(这里强调一下,nodejs 需要 nodejs 环境,类似虚拟机,直接叫运行环境吧,我也不太具体的知道这里的虚拟机和运行环境有啥区别。php 语言需要 php 的运行环境一样)。java 需要 tomcat 是因为缺乏内置的 http 服务实现,现在也已经有了,tomcat/undertow/jetty 之类的都能内嵌。有了内嵌就能直接运行,不需要使用外部的 http 服务。对于 js,不需要有任何的特殊对待,直接放在能被客户端访问到的地方就行了。

    总结

    把上面的 java 替换成 nodejs,也没啥问题。只是需要提一下,nodejs 和 js 互通的问题,对于这个问题,你需要辩证的看待。毫无疑问,nodejs 和前端的 js 是同一种编程语言,但是你更应该了解,js 是脚本语言,只是字符串,真正的解释执行是由运行环境来的,比如 nodejs,比如 chrome 浏览器。但是不同点是 nodejs 是后端语言,它的全局挂载点 global 和浏览器里的 window 不是同一个东西,nodejs 提供额外的很多 api,浏览器环境并不支持,对于这些 api,你想要互通是不可能的。更别提前端不支持(最新的 chrome 支持)模块化。也就是说如果你在 js 文件里面使用类似'module.exports', export , import 之类的更是不可能在前端使用。但是编程语言是灵活的,我前面也提到了,只是文本处理而已,那么就可以使用一个编译程序来让它支持,把 module.export 之类的api替换掉,换成 window.xxx=这样,就可以在前端使用 window.xxx` 来访问了。这也就引出来了现代化的编译工具 babel,它就可以完成这项工作,webpack4.x(还是 3.x 来着),也内置了相似的实现。

    以上

  • 其他回帖
  • 88250

    对于 SEO 来说,只要能做服务端渲染 HTML 都可以。有的搜索引擎(比如 Google)对于需要执行 JS 才能得到渲染效果的 SPA 类应用也有一定支持,我没有具体了解过,只是听说。

  • yunshang

    nuxt(Vue),Next(React) 就是 服务端渲染的框架。听说 谷歌的搜索引擎爬虫可以解析了 JS 了 😂

    1 回复
  • wuhongxu

    说到服务端渲染,我不得不吹一波 gatsbyjs。爽到哭。基本做到了最舒服的 spa。ssr 极其友好,靠着 react 的生态圈,简直爽到哭。😒

  • 查看全部回帖
EvilCodes
我的世界,我的代码,我的逻辑。

推荐标签 标签

  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    131 引用 • 1114 回帖 • 143 关注
  • 创业

    你比 99% 的人都优秀么?

    83 引用 • 1399 回帖
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 386 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 622 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 257 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 72 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖 • 3 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 612 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    287 引用 • 4484 回帖 • 670 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 1 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    6 引用 • 1 回帖 • 1 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 518 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    29 引用 • 111 回帖
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 733 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 199 关注
  • 分享

    有什么新发现就分享给大家吧!

    246 引用 • 1786 回帖
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 444 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 70 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3170 引用 • 8209 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖 • 1 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    167 引用 • 1493 回帖 • 1 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    84 引用 • 139 回帖 • 2 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 341 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 33 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 268 回帖 • 88 关注