React專案 fetch 本地json檔案 404問題
今天在搞專案的時候,想要在React專案中fetch本地的json檔案卻一直報404。
網上的解決方案,差不多說地址都是相對於首頁index.html而言,所以將json資料放在相對index.html上就好了。
可是鼓搗了個把小時還是沒有解決問題。據我觀察,網上的解決方案都是基於 create-react-app
的專案,而我的專案是自己整合的環境。
為了驗證網上的解決方案的可行性,不多說新建一個 create-react-app
構建的demo開擼~
####create-react-app 專案
在 APP.js
中 加入 fetch
的函式,比如就放在 componentWillMount
componentWillMount = () => {
fetch("./data.json")
.then(res => res.json())
.then(json => console.log(json))
}
然後,在 public 資料夾下,新建一個 data.json 檔案看看能不能取到資料。
{
"test1": 1,
"test2": 2,
"test3": 3
}
重新整理下頁面,發現很輕鬆地就取到了資料,證明網上的解決方案都靠譜,不過都是基於 create-react-app 這個腳手架構建的專案是這樣引的。
檔案路徑是這樣的:
####尋找原因
為什麼我自己整合的環境會遇到BUG呢?好吧,直接忽略找的過程(雖然確實鼓搗了好久,還把專案移植到了 create-react-app
環境下),Webpack
中的 devServer 配置項就是引起這一切問題的原因,它的功能大概是這樣:
- 在開發環境下,DevServer 提供虛擬伺服器,讓我們進行開發和除錯;
- 提供實時重新載入。簡直美滋滋。大大減少開發時間。
然而罪魁禍首是 contentBase 這個屬性。(有興趣的可以去了解,我這裡給出BUG解決方案)
####解決方案
在 webpack.config.js
中(或者是 webpack.dev.config.js
package.json
start 命令跑的是什麼檔案就是哪個)
const path = require("path")
module.exports = {
//其他配置不寫了
...,
devServer: {
contentBase: path.join(__dirname, 'public')
}
}
然後再新建 public
資料夾,在把 json 檔案和 index.html(因為它也是靜態檔案)都丟進去,最後終於拿到了我想要的資料~
####再看 create-react-app
那麼 create-react-app 肯定也在哪裡設定了 contentBase 這個屬性。
在 package.json
中,我們發現在 create-react-app
構建的專案 npm start
,跑的是 react-scripts start
,在 node_modules
資料夾中找到 react-scripts
資料夾,在裡面搜尋 contentBase
屬性,果然我們在 react-scripts/config/webpackDevServer.config.js
檔案中找到了
contentBase: paths.appPublic
paths.appPublic
是在別處的封裝,但我們可以知道就是這條配置起的作用。
那麼,之前網上找的答案給出的結論也是片面的,檔案不是關於 index.html 的相對位置,是對於 public 資料夾的相對位置,並且只能讀取 public 資料夾中的靜態檔案,所以對於 public 的同級上級是取不到的,就把靜態檔案放到 public 資料夾中吧,這也是一個很好的編碼規範。
相關推薦
React專案 fetch 本地json檔案 404問題
今天在搞專案的時候,想要在React專案中fetch本地的json檔案卻一直報404。 網上的解決方案,差不多說地址都是相對於首頁index.html而言,所以將json資料放在相對index.html上就好了。 可是鼓搗了個把小時還是沒有解決問題。
React-Native 訪問本地 json 檔案微技巧
一、使用場景 相信大多開發人員平時私下裡也做一些自己的專案或者練習的 demo,有時候要用到網路資料,但是,對於像我這樣不太懂後臺的開發,同時又懶得搭建 TomCat 的人,絕殺技無非就是在本地建立一個 json 檔案,然後在訪問網路的時候 URL 寫
VUE小專案問題之用axios外掛取本地json檔案,報404錯誤。
一、問題 在用axios獲取本地json資料時,總是報404錯誤。 百思不得其解。 二、經過 看網友們都是把本地json檔案放在static檔案中。 我寫的專案存放在assets中,恍然大悟,應該是檔案位置。 三、結果 檔案改存為static axios({
HTML5實現本地JSON檔案的讀寫
參考: 使用HTML5來實現本地檔案讀取和寫入 (FileReader讀取json檔案,FileSaver.js儲存json檔案) w3school <input>標籤 FileReader WebAPI介面 FileSaver.js下載地址 File
vue使用本地json檔案資料
static目錄中新增res目錄, res目錄中放入json檔案 vue檔案的mount或其他函式中呼叫axios.get this.axios.get( 'static/res/address.json' ).then(res=>{ con
載入本地json檔案,並利用批處理呼叫Chrome顯示html
載入本地json檔案 1.載入本地json檔案 為了除錯儲存在本地的json資料,需要進行讀入。一般使用jQuery來進行,但需要對瀏覽器進行一點設定。 Chrome瀏覽器中有一個啟動選項--allow-file-access-from-files,在啟動的時候需要設定一下。
react 使用fetch 上傳檔案 寫法
第一,使用原生input的type=”file” <input type="file" name="file" onChange={this.onChange} style={{display:'none'}} ref={this.inputRef}/> 第二, 用它的o
谷歌通過ajax獲取本地JSON檔案,為什麼會提示跨域?(轉載)
https://blog.csdn.net/jiaoshuaiai/article/details/78417683 在本地寫了一段JSON程式碼,然後用ajax讀取後,在瀏覽器開啟,發現谷歌提示涉及到跨域問題, 但是跨域是由於協議,域名,埠中有一個不同,才會跨域,我在本地訪問自己的檔
js讀取本地json檔案
js程式碼: // 獲取api的ip部分 var mJson=$.ajax({url:"api.json",async:false});
通過http服務請求本地json檔案
<!DOCTYPE html> <html> <!-- 數量的加減 給一個ng-model就可以了 -->
chrome非同步載入本地json檔案報錯:cross origin request are only supported for HTTP
定義了一個data.json檔案儲存學生相關資訊,在index.html中想通過$.getJSON("data.json" , function(data){...})方法獲取並顯示json檔案中的內容。 結果執行後chrome報錯如下:Cross origin reque
jquery通過ajax方法獲取本地json檔案不執行success回撥
//a.json { list:{ createtime:"2018/11/05 16:45:22", status: 0, name: "aa", price: "188.00", num: "2", img: "1.jpg" } }
React Native 之讀取JSON 檔案
一:建立json 檔案 放在 ./data/目錄下 { "employees": [ { "FamilyName": "張", "giveName": "三", "salar
谷歌通過ajax獲取本地JSON檔案,為什麼會提示跨域?
在本地寫了一段JSON程式碼,然後用ajax讀取後,在瀏覽器開啟,發現谷歌提示涉及到跨域問題, 但是跨域是由於協議,域名,埠中有一個不同,才會跨域,我在本地訪問自己的檔案,怎麼和跨域扯上關係了?? 下
jquary訪問本地json檔案之報跨域問題
小夥伴們在瞭解jquary時,想用ajax訪問本地的json檔案,常常會報 Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension,
解析本地json檔案,模擬網路請求
/** * Demo class * * @author yyd * @date 2017/11/15 */ public class ParseLocalJsonUtil { /** * 從asset路徑下讀取對應檔案轉String輸出 * <p&
android 之 讀取本地json檔案返回string
public static String getJson(String fileName, Context context){ StringBuilder stringBuilder
Springboot 讀取專案下的Json檔案成物件
文章目錄 Springboot 讀取專案下的Json檔案成物件 1、建立Json檔案 2、建立讀取工具類 3、讀取 4、輸出
31.Elasticsearch批量匯入本地Json檔案Java實現(ES檔案同步)
題記產品開發需要,我們需要將網際網路採集的資料儲存到ES中,以實現資料的全文檢索。網際網路採集的資料,往往格式雜亂,需要先進行資料清洗操作。而ES支援的入庫格式,json格式資料會相對方便些。本文主要介紹,如何將格式化的Json檔案批量插入到ES中。1、需提前做的工作1)設計
flutter讀取專案中的json檔案資料
前言 網上有很多讀取的,但對於小白的我來說(剛接觸flutter一週,dart完全不懂),從專案中讀取 xxx.json檔案,並將檔案中的json內容轉換為string物件是困難的,話不多說直接上程式碼 環境準備 由於我是在自己專案中實現的,有環境,及依賴需要引入,就全部都貼出來