2017-02-03 75 views
2

幫助不大?angular2 http.post()到本地json文件

我試圖寫純JSON裏面我的項目文件,我的項目樹是這個樣子:

src 
->app 
-->components 
--->people.component.ts 
--->(other irrelevant components) 
-->services 
--->people.service.ts 
-->data 
--->JSON.json 
->(other irrelevant src files) 

的代碼在我people.component.ts只是用來呼叫和訂閱到我的people.service.ts中的一個函數,傳遞newPerson屬性,該屬性使用angular2魔術數據綁定到DOM;這是在函數內部name.service.ts

public addPerson(newPerson) { 
     let headers = new Headers(); 
     headers.append('Content-Type', 'application/json'); 
     return this.http.post('app/data/PEOPLE.json', newPerson, { header: headers }) 
     .map(res => res.json()) 
} 

我的目標是寫(必要時更換)內PEOPLE.jsonnewPerson屬性(或整個文件)。當然,目前的addPerson()函數會返回一個錯誤。

我也試過put方法,它的錯誤略有不同,但我還沒有發現任何一種方法的解決方案。

我知道斷然這不是與格式/數據類型我試圖把在PEOPLE.json文件中的錯誤。

+0

您需要一個服務器端組件來處理寫入。 –

回答

1

您無法從瀏覽器寫入文件。期。即使這種行爲是可能的,它將存儲在用戶端,而不是你的服務器。如果您的任務確實是在用戶端寫入內容,請參閱localStorage documentation(或其他API實現)。但是如果你打算在瀏覽器之外爲了某種目的而使用該文件,這將是一件不平凡的任務。

如果你想保存在服務器上的文件,那麼你需要喊得它在後端。

+0

那麼這種功能如何在android平臺上工作呢? - 假設我爲此使用Nativescript-angular?還有一種方法可以堅持本地存儲嗎?如果是這樣的解決方案 –

+0

hm,您從未在您的問題中提及您使用android平臺。不幸的是,我沒有這方面的經驗:(可能有自己的方式來處理...但是,我仍然希望它應該有存儲API。據我所知,LocalStorage用於:a)在2相同網絡應用程序的實例(即在2個選項卡中打開網站); b)離線應用程序(和瀏覽器擴展)c)黑客(我用它從Web上的自動文件下載,我沒有管理員權限來安裝/啓動應用程序) –

2

不幸的是,你不能直接使用客戶端(瀏覽器)的JavaScript您的本地文件系統PUT或POST到一個文件中。

考慮構建一個簡單的服務器來處理POST請求。如果您最喜歡使用JavaScript,請嘗試使用Node.js快遞

// server.js 
'use strict' 

const bodyParser = require('body-parser'); 
const express = require('express'); 
const fs = require('fs'); 

const app = express() 
app.use(bodyParser.json()); 

app.use(function(req, res, next) { 
    res.header('Access-Control-Allow-Origin', 'http://localhost:8000'); 
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); 
    res.header('Access-Control-Allow-Methods', 'POST'); 
    next(); 
}); 

app.post('/', (req, res) => { 
    console.log('Received request'); 
    fs.writeFile('json.json', JSON.stringify(req.body), (err) => { 
    if (err) throw err; 
    console.log('File written to JSON.json'); 
    res.send('File written to JSON.json') 
    }) 
}); 

app.listen(3000,()=>{ 
    console.log('Listening on port 3000. Post a file to http://localhost:3000 to save to /JSON.json'); 
});