先讓前後端說同一種話,每一步都有依據。
契約列出方法、路徑與JSON外層。後端已提供,這堂先學啟動與讀取,不重寫伺服器或身份機制。
這關帶走:請求方法與services映射正確,選項來自實際JSON。
先學一招:API契約比猜路徑可靠
請求方法與services映射正確,選項來自實際JSON。
帶上你的裝備
- 自己的service-site/frontend既有inquiry.html、inquiry.js與完整styles.css;config.js本關才新增
- 隨起始包提供的API_CONTRACT.html、START_HERE.html;先啟動後端再開/api/services記錄JSON,不附管理密碼
- 自己的後端根網址;啟動後才填GET /api/services的實際200 JSON
契約列出方法、路徑與JSON外層。後端已提供,這堂先學啟動與讀取,不重寫伺服器或身份機制。
先分清自己的作品、線上畫面與可啟動參考包;線上參考不提供API,請在本機閱讀隨包OPEN_REFERENCE.html後操作。
一起拆解:從回應欄位做出選項
本關18分鐘觀念:3分鐘看輸入、6分鐘逐步推演、5分鐘正常與錯誤對照、4分鐘先預測再說明。
這次的輸入
自己的後端GET /api/services回200,JSON外層叫services。
{ "services":[{"id":"web","name":"網站設計"}] }
// option.value = item.id
// option.textContent = item.name這段是觀念縮圖,完整可操作檔案在本關參考成果;請依當前階段判讀,不把片段直接貼到任意位置。
一步一步推演
- 先開後端API網址看JSON,記方法、路徑、狀態與外層;此時前端config.js尚待新增。
- 請AI新增公開config並串接GET,id作值、name作文字,不寫死顯示清單。
- 用manage更名web,重整前端應讀到新名稱,不能只改前端文字。
正常應看到
選單值仍web,顯示後端最新服務名;這堂尚未POST詢問。
常見錯誤對照
把payload.services寫成payload.serviceList會得到undefined,即使HTTP是200也無法渲染。
先預測,再說明原因
後端把名稱改掉但id不變,草稿選項應如何對應?
跟著觀察
- 先讀「從回應欄位做出選項」的輸入,指出本關實際檔案或資料。
- 後端把名稱改掉但id不變,草稿選項應如何對應?
- 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。
這是你的實際操作確認,小測不會替你勾選。
動手挑戰:先讓前後端說同一種話
請求方法與services映射正確,選項來自實際JSON。
先準備
- 自己的service-site/frontend既有inquiry.html、inquiry.js與完整styles.css;config.js本關才新增
- 隨起始包提供的API_CONTRACT.html、START_HERE.html;先啟動後端再開/api/services記錄JSON,不附管理密碼
- 自己的後端根網址;啟動後才填GET /api/services的實際200 JSON
親手讀HTML契約、啟動後端,在Network看一個真實GET。
照這個順序開始
- 解壓完整service-site,依START_HERE設定自己的後端密碼並啟動。
- 請AI按契約在config.js與inquiry.js接GET /api/services,不留硬編清單。
- 用manage工具改web名稱再重載,核對前端來自後端。
串接真正的服務清單
主要使用 Cursor 內建 AI;先附資料,再送出指令。
- 1.附上這些檔案與資料
- 自己的service-site/frontend既有inquiry.html、inquiry.js與完整styles.css;config.js本關才新增
- 隨起始包提供的API_CONTRACT.html、START_HERE.html;先啟動後端再開/api/services記錄JSON,不附管理密碼
- 自己的後端根網址;啟動後才填GET /api/services的實際200 JSON
本關才新增,不用先附檔:service-site/frontend/config.js。請讓 AI 建立在指定位置;收到程式碼時核對檔名後自行儲存。
- 2.貼到哪裡
- 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
- 只用 @ 附上上方已存在的指定檔案;「本關才新增」的檔案不需要先找或先建空檔,再貼下方Prompt。
- 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
- 3.預期回覆與操作
- 請AI按契約在config.js與inquiry.js接GET /api/services,不留硬編清單。
- 更名後前端重載讀到新名稱,沒有硬編假成功。
- 4.自己檢查結果
- 請求方法與services映射正確,選項來自實際JSON。
- 更名後前端重載讀到新名稱,沒有硬編假成功。
串接真正的服務清單 Prompt(可收合)
你是協助零基礎學員的網站開發助手。我使用 Cursor 免費版編輯原生 HTML、CSS、JavaScript;必要時把你提供的內容手動貼入檔案。
情境與本次輸入:從第16堂正常service-site/frontend承接;起始包已附真實Node.js22+後端、API_CONTRACT.html與START_HERE.html,無第三方套件。後端預設127.0.0.1:8780,資料在frontend外backend/.data。GET /api/services回200 {services:[{id,name}]},空陣列與503失敗不同。config.js只放公開apiBase;請求credentials:include,來源需後端明確允許,不用no-cors。APPA、紫綠tokens與五欄草稿保留。這堂只讀服務,尚未POST詢問。
本次任務:起始版已存在的檔案才需附上;本關新增service-site/frontend/config.js,不要要求先附不存在的檔案。依提供API_CONTRACT.html與START_HERE.html,只串接GET /api/services。回應200外層services陣列,每筆id/name;id放option.value、name以textContent顯示,不保留硬編的三項假清單。config.js僅放公開apiBase http://127.0.0.1:8780,不放秘密;fetch credentials:include,不用no-cors。載入中先清舊選項、禁用選擇與送出,姓名Email主旨需求保留。保持五欄驗證、草稿與APPA,這堂不POST。指出實際檔案與JSON映射,更新入口文案讓讀取與送出階段清楚;列後端更名後前端重載的驗收。
請先閱讀我附上的相關檔案或資料,資訊缺漏時精確列出需要補充的項目,不猜檔名、API 或測試結果。說明以繁體中文撰寫,指出檔案與修改位置;檢查結果區分已知、待驗與未完成。只處理學生自己的練習副本,不改現有展示網站,不要求付費訂閱。Cursor AI 無法使用?改用 ChatGPT 備援
把上方指定的檔案內容、清單與補充資料,連同同一份 Prompt 貼入 ChatGPT 對話。只貼電腦上的路徑,無法讓它讀取你的檔案。
收到程式碼時,先核對檔名與修改位置,再手動存回自己的練習副本;若收到檢查表或補檔步驟,就逐項操作。不要把 Prompt 或程式碼框的反引號貼進 HTML/CSS。
兩邊都受限時,可先看既有參考成果、檢查差異與手動修改;未做過的 AI 生成或公開發布仍記待完成。不要貼入帳密、金鑰或真實個資。
複製只取得 Prompt 文字,檔案需自行在 Cursor 附上;本頁不會呼叫 AI 或自動完成關卡。
卡住時,APPA 給你一點線索
線索 1|先找現象與證據
先確認後端ready與GET回200,不只看前端畫面。
線索 2|再縮小修改範圍
option.value用穩定id,顯示文字用name。
回到自己的作品,逐項檢查
- 請求方法與services映射正確,選項來自實際JSON。
- 更名後前端重載讀到新名稱,沒有硬編假成功。
- 未實際完成的AI、發布或裝置驗收記待完成。
需要對照?看這一關的參考成果
先檢查自己的作品,再對照差異。開啟參考不會算完成。
查看前端參考畫面(完整操作請下載參考包)(另開分頁)線上只看前端畫面;完整操作請下載。本頁不提供案件API。把參考包解壓到新的資料夾,先讀 OPEN_REFERENCE.html,再啟動隨包後端;不要覆蓋自己的作品或案件。
下載本關可啟動參考包尚未完成可以先往下看,之後再回來補做。
保留依據與結果,再帶著作品往下走。
保留自己的修改差異與檢查結果。完成兩項操作確認再往下一關;也可以先閱讀,稍後補做。
關卡紀錄由你自行確認;本頁不會讀取 Cursor 檔案或自動驗收作品。
留下自己的檢查紀錄
這是第 17 堂共用筆記,換關卡仍會保留。未實際做過的操作寫「待完成」。
重設會清除第 17 堂六步勾選,筆記、另一堂進度與網站檔案保留。