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

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

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 引用 • 269 回帖 • 47 关注
  • Q&A

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

    7935 引用 • 36293 回帖 • 168 关注

相关帖子

欢迎来到这里!

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

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

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

    2 回复
  • EvilCodes
    作者

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

    1 回复
  • 88250

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

  • Eddie

    我记得有一种叫 [服务端渲染]ssr, 是不是就可以解决 seo 问题?

    1 回复
  • XPPA

    node 和其他的后端从流程、功能上来看并没有什么不同,部署的方式和运行的地方也和其他的后端项目大同小异。

  • yunshang

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

    1 回复
  • 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 来着),也内置了相似的实现。

    以上

  • wuhongxu

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

  • EvilCodes
    作者

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

请输入回帖内容 ...
EvilCodes
我的世界,我的代码,我的逻辑。

推荐标签 标签

  • Markdown

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

    167 引用 • 1509 回帖
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 257 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    124 引用 • 580 回帖
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 6 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 561 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 1 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖 • 3 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖
  • H2

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

    11 引用 • 54 回帖 • 652 关注
  • V2Ray
    1 引用 • 15 回帖 • 1 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 733 关注
  • Hprose

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

    9 引用 • 17 回帖 • 615 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 209 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 383 回帖 • 6 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 248 关注
  • 周末

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

    14 引用 • 297 回帖
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    264 引用 • 665 回帖 • 1 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 2 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 2 关注
  • 音乐

    你听到信仰的声音了么?

    60 引用 • 511 回帖
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 127 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 705 关注
  • OnlyOffice
    4 引用 • 2 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1347 回帖
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 181 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    6 引用 • 14 回帖