Web_Design 板


LINE

我这边遇到了前後端如何接在一起的问题,想请各位前辈帮帮忙 专案是前端用:React,後端用:node.js 最初我启动 react 是 3000 port, node 是 5500 port 也就是在 react 中长这样 fetch("http://localhost:5500/api") 可是我的老师希望只在一个 port 启动 就是类似在 node 使用样板语言让後端资料能直接渲染画面那样 从头到尾只会有一个网址 我在网路上找了很多资料,都是跟我一样的做法 (两个端点) 或是在 package.json 中设置代理服务器 "proxy": "http://localhost:5500/" (可是这也是两个端点) 有没有人有遇过类似的做法,或是相关关键字可以提供给我查询 谢谢~ --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.197.56.209 (澳大利亚)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Web_Design/M.1567992270.A.AB5.html
1F:推 oledu: 把打包完的档案丢到node当静态资源? 09/09 09:46
事实上我试过直接在 React 中打包完 将整包静态资源放入 node 的 public 资料夹(不太熟悉怎麽做,手法有点粗糙) 然後因为资料夹大概会长这样 -public -index.html -mainifest.json -static -css -js -media 我直接先在 app.use 中使用 res.sendFile(path.join(__dirname + '/index.html')) 抓取由 React 来的 index.html 的路径 可以抓取到首页,但是点击按钮要 fetch 资料时就会出现 404 not found 错误 感觉是因为我的路径设置不对,或静态资料放置的位置不对 可是我找不到相关资料,不知道怎麽修正 所有资料如下:程式码中包含很多额外的垃圾我没有删掉抱歉 React: https://github.com/jenifers001d/AzureReact/blob/master/src/App3.js Node: (48 line) https://github.com/jenifers001d/AzureNode/blob/master/app.js 问题图片集: https://hackmd.io/@OQeeWHXgRk6Fwb8MEh1Jww/HktJiIX8r ※ 编辑: Moneyyyyy (49.197.56.209 澳大利亚), 09/09/2019 13:01:11
2F:→ pkro12345: 就build完当静态资源阿 09/09 12:56
3F:推 GsMoMo: https://tinyurl.com/yyucogjv 请参考 09/09 15:00
试了G大的方法,可以成功运行,真的是非常感谢 稍微研究了一下 concurrently 是同时执行两条监听命令 (实际上还是两个端点,那麽如果我想将其部署在 Heroku 上) (node 中 app.listen(5500); 是不是要做修改?) 另外,实务上是比较偏向这种,将後端(node.js写成)的档案放在 React 中 而不是将 React build 完,将静态资料放进後端(node.js写成)的public资料夹? 还是後者也可以做到,只是我不会(掩面 如果後者也可以做到,不知道有没有网路上的参考资料能让我学习? 再麻烦有资源的前辈告知,谢谢 ※ 编辑: Moneyyyyy (124.184.105.23 澳大利亚), 09/09/2019 21:08:23
4F:→ y3k: app.use(express.static())跟app.get() app.post() 09/10 07:07
5F:→ y3k: 多宣告几个就好了啊 09/10 07:07
抱歉这边不理解,多宣告是指针对我上述哪个问题?
6F:→ y3k: 而且我想你误会了.... react-script也是透过node去听 只是他 09/10 07:18
7F:→ y3k: 听的地方你没去追就看不到而已 09/10 07:18
这边我不确定是不是因为我不太懂没说清楚 我目前的理解是 React 启动在 http://localhost:3000 而我的後端启动在 http://localhost:5500 这样是两个端点,React 中用 fetch 取资料时需要连结到另一个 url 另外,如果我将 React 和後端分别部署在 Heroku 就会是两个不同的 url 但是目前老师的要求是,例如 React 启动在 http://localhost:3000 我点击了一个按钮後,会连到 http://localhost:3000/book (这个不会明确显示在网址栏),然後後端送回资料渲染画面 如果将上述部署在 Heroku 就会是只有一个 url 例如:https://myapp.herokuapp.com/ 我的 fetch 直接放 "/book" 参数就好,不会是放不一样的 url ※ 编辑: Moneyyyyy (124.184.105.23 澳大利亚), 09/10/2019 10:55:10
8F:→ brianwu1201: 觉得奇怪,部署後你写的一切 react code 都只是透过 09/10 18:30
9F:→ brianwu1201: script tag 一个个引入,uri 的 domain 由 process. 09/10 18:30
10F:→ brianwu1201: env 环境变数来决定,不会有你说的前端後端分别部署 09/10 18:30
11F:→ brianwu1201: 的情形。 09/10 18:30
12F:→ at5lp6andy: 3000port那个只是create_react_app让你debug用,跟部 09/10 19:47
13F:→ at5lp6andy: 署还有後端无关,也不是你打包好的网页。你最後做好 09/10 19:47
14F:→ at5lp6andy: 的网页会跟你node在同一个port,原因是你的前端是藉 09/10 19:47
15F:→ at5lp6andy: 由node程式中app.use传到server。如果要检测後端是否 09/10 19:47
16F:→ at5lp6andy: 有接上前端,你应该在node所使用的port开启你的网页 09/10 19:47
17F:→ at5lp6andy: ,而不是使用3000port 09/10 19:47
谢谢 b大a大 的解说,我有稍微理解了
18F:推 shter: 我觉得你的基础完全不行,一个 port 启动很正常 09/11 03:58
19F:→ shter: 你根本不需要 3000 port,你只要 react build 出来的丢进 09/11 03:58
20F:→ shter: node.js 的静态资料夹就好,常开 5500 连就对了 09/11 03:59
21F:→ shter: 前後端分离,前端不用丢在 5500 跑也没关系 09/11 04:00
22F:→ shter: 你甚至随便丢一个网路空间让它去跟 api 存取都行 09/11 04:00
23F:→ shter: 如果你前後端要放在一起,那就是都丢在 node.js 目录下 09/11 04:00
24F:→ shter: 正确前後端分离的话没有什麽实务上谁要放在谁那里的问题 09/11 04:02
25F:→ shter: 但布署方便来说通常最终是前端放在後端的某个目录下居多 09/11 04:02
26F:→ shter: 因为後端要决定伺服器的执行环境与目录结构 09/11 04:04
27F:推 shter: 有空玩玩 Apache 或 nginx 理解一下 http server 概念好了 09/11 04:10
28F:→ shter: 不然 node.js 监听 web 服务的方法有点抽象会让你误解 09/11 04:11
29F:推 shter: 另外看起来现代框架、打包、运行一条龙残害新手不浅 09/11 04:15
30F:→ shter: 居然会对静态网页前端误解成要启动 web server 才能执行 09/11 04:18
31F:→ shter: 启动 web server 是为了跑後端,让前端顺利存取 API 运作 09/11 04:20
32F:→ shter: 所谓 port 3000 只是一种方便需要 build 才能执行的开发用 09/11 04:21
33F:→ shter: 最基本的网页你写完存档在本机到浏览器把档案打开就能看到 09/11 04:22
34F:→ shter: 但现代 build 网页是因为可能要把 scss compile 09/11 04:23
35F:→ shter: 然後 js 模组化也要编译组合压成一支档案来执行 09/11 04:23
36F:→ shter: 再加上方便浏览器出错时指回原始档案位置而需要 source map 09/11 04:24
37F:→ shter: 最後是即时监控程式码有更新就自动 build 完再立即重新整理 09/11 04:25
38F:→ shter: 前端的 node 主要是在做这些事,并不是实际布署也需要这样 09/11 04:27
对,我的基础有很多地方要加强,因为学得有点乱 我在接触现代框架前,单纯只写js,也明白不用跑 web server 就能在浏览器上出现 但是使用现代框架,我自己还没去搞懂 webpack 那些 想说先能动起来就好(这是我自己的问题 >"< 谢谢 s大 不厌其烦详尽的解说 在我询问完朋友後,最後也是归到对於 http server 和 route 的不熟悉 等我试试新的想法,顺利解完後再 po 上来补充 谢谢大家的回应 ※ 编辑: Moneyyyyy (131.181.158.30 澳大利亚), 09/11/2019 11:03:32
39F:推 googoo1102: 前端打包後成为static资源档案 09/15 00:27
40F:推 googoo1102: 参考一下 https://tinyurl.com/y65uxy6l 09/15 00:34
41F:→ googoo1102: https://tinyurl.com/yxscmr84 09/15 00:35
42F:推 froce: 最近为了学go和vue才遇到类似的问题,简单整理一下。 09/21 16:35
43F:→ froce: 1.前端编译後,就只是静态的网页,透过ajax去取资料而已。 09/21 16:35
44F:→ froce: 2.所以你只要把取资料的api用网址能够区分,就能够一个埠号 09/21 16:35
45F:→ froce: 解决。 09/21 16:35
46F:→ froce: 3.这种开发方式,最让人头痛的是前期api怎麽定、开发时的跨 09/21 16:35
47F:→ froce: 域存取api这些问题 09/21 16:35







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP