2017-02-03 10 views
2

少し助けてください?angular2 http.post()をローカルjsonファイル

私は にしようとしています

私のプロジェクト内のファイルに純粋なJSONを書き、私のプロジェクトツリーは次のようになります。私のpeople.component.ts

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

コードはちょうど通話に使用してを購読されて私のpeople.service.ts内の関数に、angle2の魔法を使ってDOMからデータバインドされたnewPersonプロパティを渡します。これは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.json内部newPersonプロパティ(またはファイル全体)。もちろん、現在のaddPerson()関数はエラーを返します。

私もputメソッドを試しましたが、エラーは多少異なりますが、いずれの方法でも解決策が見つかりませんでした。

私は具体的には、私がPEOPLE.jsonファイルに入れようとしているデータのフォーマット/タイプのエラーではないことを知っています。

+0

書き込みを処理するにはサーバー側のコンポーネントが必要です。 –

答えて

1

ブラウザからファイルに書き込むことはできません。期間。このような操作が可能な場合でも、サーバーではなくユーザー側に格納されます。あなたの仕事が実際にユーザー側で何かを書く場合は、localStorage documentation(または他のAPI実装を組み合わせる)を参照してください。しかし、あなたのブラウザの外で何らかの目的のためにそのファイルを使用するつもりならば、それは自明ではありません。

サーバーにファイルを保存する場合は、バックエンドでファイルを渡す必要があります。

+0

このような機能は、アンドロイドプラットフォームではどのように機能しますか? - これについてNativescript-angularを使用しているとしますか?また、ローカルストアを維持する方法がありますか?もしそれが解決策 –

+0

hmであるなら、あなたはあなたの質問に決して言及していない、あなたはアンドロイドプラットフォームで働いている。残念ながら、私はそれを経験していません:(それに対処する独自の方法があるかもしれません...しかし、私はまだそれがストレージAPIを持っている必要があることを願っています。私の知る限りでは、LocalStorageは、同じWebアプリケーションのインスタンス(つまり、2つのタブで開いているWebサイト)。 b)オフラインアプリケーション(およびブラウザ拡張機能)c)ハッキング(私は、アプリケーションのインストール/起動のための管理者権限を持たないマシン上のウェブからの自動ファイルダウンロードにこれを使用しました) –

2

残念ながら、クライアントサイド(ブラウザ)JavaScriptを使用してローカルファイルシステム上のファイルにPUTまたはPOSTを直接行うことはできません。

POST要求を処理する単純なサーバーを構築することを検討してください。 JavaScriptで最も快適な場合は、Node.jsでExpressを試してみてください

// 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'); 
}); 
関連する問題