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

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

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 模型而得以轻量和高效。

    138 引用 • 268 回帖 • 194 关注
  • Q&A

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

    6551 引用 • 29424 回帖 • 246 关注

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 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 来着),也内置了相似的实现。

    以上

  • 其他回帖
  • EvilCodes
    作者

    这个和 html 文件中的 js 是不一样的是吧

  • 88250

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

  • 88250

    Node 写的 js 需要用 node 命令启动,这和 Java 很类似。

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

推荐标签 标签

  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1398 回帖
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    85 引用 • 1201 回帖 • 449 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 636 关注
  • Markdown

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

    163 引用 • 1450 回帖
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    129 引用 • 793 回帖
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    70 引用 • 532 回帖 • 712 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 462 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    10 引用 • 85 回帖
  • SMTP

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

    4 引用 • 18 回帖 • 588 关注
  • 酷鸟浏览器

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

    3 引用 • 59 回帖 • 25 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 21 关注
  • 周末

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

    14 引用 • 297 回帖
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 345 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    9 引用 • 32 回帖 • 166 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    85 引用 • 895 回帖 • 1 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • Q&A

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

    6551 引用 • 29424 回帖 • 245 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 38 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 53 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    523 引用 • 4581 回帖 • 690 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 71 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 3 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 4 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    185 引用 • 318 回帖 • 346 关注