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

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

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 回帖 • 201 关注
  • Q&A

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

    6511 引用 • 29268 回帖 • 247 关注

相关帖子

欢迎来到这里!

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

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

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

  • 其他回帖
  • 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
    作者

    D 哥现在有一种叫做中途岛模式 java 做后台,然后 node 作为中间层这种方式可以解决 seo 问题吗?

    1 回复
  • 88250

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

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

推荐标签 标签

  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 24 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 8 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    710 引用 • 1173 回帖 • 176 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    915 引用 • 931 回帖
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    76 引用 • 421 回帖
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 596 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 1 关注
  • 笔记

    好记性不如烂笔头。

    303 引用 • 777 回帖
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 44 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 641 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 438 关注
  • HBase

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

    17 引用 • 6 回帖 • 44 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 15 关注
  • MyBatis

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

    170 引用 • 414 回帖 • 431 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖 • 1 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 1 关注
  • iOS

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

    84 引用 • 139 回帖
  • Netty

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

    49 引用 • 33 回帖 • 22 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 604 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 10 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    57 引用 • 22 回帖
  • Maven

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

    185 引用 • 318 回帖 • 348 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    123 引用 • 168 回帖
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    90 引用 • 383 回帖 • 1 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18591 引用 • 69184 回帖 • 1 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖