JSON パケットを Web サーバーに送信する iOS アプリがあります。ウェブサーバーのコードは次のようになります。
var express = require('express');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var app = express();
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function (callback) {
console.log("MongoDB connection is open.");
});
// Mongoose Schema definition
var Schema = mongoose.Schema;
var LocationSchema = new Schema({
X: Number,
Y: Number,
Orientation: Number,
UserID: String,
Time: String
});
// Mongoose Model definition
var LocationsCollection = mongoose.model('locations', LocationSchema);
// create application/json parser
var jsonParser = bodyParser.json();
// URL management
app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
});
app.post('/update', jsonParser, function (req, res) {
if (!req.body) return res.sendStatus(400);
else {
console.log(req.body);
}
});
// Start the server
var server = app.listen(3000, function () {
var host = server.address().address
var port = server.address().port
console.log('App listening at %s:%s',host, port)
});
重要な部分は、iOS アプリから送信された着信 http 要求を処理する app.post メソッドです。現時点では、req.body をコンソールに出力するメソッドは次のようになります。
{
datapoint_1:
{ timestamp: '2015-02-06T13:02:40:361Z',
x: 0.6164286615466197,
y: -0.6234909703424794,
id: 'B296DF8B-6489-420A-97B4-6F0F48052758',
orientation: 271.3345946652066 },
datapoint_2:
{ timestamp: '2015-02-06T13:02:40:961Z',
x: 0.6164286615466197,
y: -0.6234909703424794,
id: 'B296DF8B-6489-420A-97B4-6F0F48052758',
orientation: 273.6719055175781 }
}
したがって、リクエストがネストされた JSON オブジェクトであることがわかります。理想的には、リクエスト オブジェクト (つまり、データポイント) をループして、それらを mongoDB データベースに (mongoose 経由で) 挿入したいと思います。ただし、req.body を使用して多くのことを行う方法がわかりません。リクエストを反復するためのループを作成したり、ネストされた JSON ファイルを適切に解析してマングース スキーマと一致させたりする方法を作成できないようです。これらのデータポイントをマングースデータベースに挿入する方法について、誰かがガイダンスを提供できますか?