2017-03-17 4 views
0

私は、次の操作を行いたいと思います:ノードAPIリクエスト

  1. 新しいオブジェクト「評価」

  2. がたaclientからデータを取得し、POSTリクエストを作成したオブジェクトに

  3. を、それを保存作成「評価」オブジェクトのデータを使用

  4. 「評価」オブジェクトへのリクエストの応答を追加

  5. 保存は、DB

をモンゴするオールズはよさそうだが、私は、オブジェクト「評価」にPOSTリクエストからの応答データを追加傾けます。私はそれにアクセスすることができます。しかし、私はそれに2番目の要求から追加のデータを追加することはできません。

res.on("end", function() { 
    //console.log(body.toString()); 
    body = JSON.parse(Buffer.concat(chunks)); 

console.log(body.value) // does work 

    evaluation.result.date = body.date; // does not work 
    evaluation.result.value = body.value; // does not work 

console.log(evaluation.street); //does work 


    }); 

すべてのコード:

const express = require('express'); 
const router = express.Router(); 
const passport = require('passport'); 
const jwt = require('jsonwebtoken'); 
const config = require('../config/database'); 
const User = require('../models/user'); 
const Evaluation = require('../models/evaluation'); 
//Load the request module 
var request = require('request'); 

var evaluation = new Evaluation(); 
var body; 



router.post('/evaluation', (req, res, next) => { 
    evaluation.street =req.body.street; 
    evaluation.house_number =req.body.house_number; 
    evaluation.town =req.body.town; 
    evaluation.zip =req.body.zip; 
    evaluation.category =req.body.category; 
    evaluation.type =req.body.type; 
    evaluation.year =req.body.year; 
    evaluation.living_area =req.body.living_area; 
    evaluation.ground_area =req.body.ground_area; 
    evaluation.elevator =req.body.elevator; 
    evaluation.garages =req.body.garages; 



var http = require("https"); 
var options = { 
    "method": "POST", 
    "hostname": "", 
    "port": null, 
    "path": "", 
    "headers": { 
    "content-type": "application/json", 
    "authorization": "", 
    "cache-control": "no-cache", 
    "postman-token": "1d886874-2932-d64c-1f23-a62d657f75a2" 
    } 
}; 

var req = http.request(options, function (res) { 
    var chunks = []; 

    res.on("data", function (chunk) { 
    chunks.push(chunk); 
    }); 

    res.on("end", function() { 
    //console.log(body.toString()); 
    body = JSON.parse(Buffer.concat(chunks)); 

console.log(body.value) // does work 

    evaluation.result.date = body.date; // does not work 
    evaluation.result.value = body.value; // does not work 

console.log(evaluation.street); //does work 


    }); 
}); 


if (evaluation.type == "ETW") { 

    req.write(JSON.stringify({ 
    category: 'ETW', 
    date: '2017-03-02', 
    address: 
    { nation: 'DE', 
     street: evaluation.street, 
     house_number: evaluation.house_number, 
     zip: evaluation.zip, 
     town: evaluation.town }, 
    construction_year: evaluation.year, 
    living_area: evaluation.living_area, 
    elevator: evaluation.elevator, 
    garages: evaluation.garages })); 

} 

else { 

    req.write(JSON.stringify({ category: 'EFH', 
    date: '2017-02-17T00:00:00', 
    address: 
    { nation: 'DE', 
    street: evaluation.street, 
    house_number: evaluation.house_number, 
    zip: evaluation.zip, 
    town: evaluation.town }, 
    construction: evaluation.category, 
    construction_year: evaluation.year, 
    living_area: evaluation.living_area, 
    plot_area: evaluation.ground_area, 
    garages: evaluation.garages })); 




} 



req.end(); 



evaluation.save(function (err) { 
    if (err) return handleError(err); 
    // saved! 
}) 
res.json({"message": "Success"}); 
}); 



router.get('/evaluation', (req, res) => { 
    Evaluation.getAll((err, evaluations) => { 
     if(err){ 
      throw err; 
     } 
     res.json(evaluations); 
    }); 
}); 








module.exports = router; 

スキーマ:

const mongoose = require('mongoose'); 
const config = require('../config/database'); 

// User Schema 
const EvaluationSchema = mongoose.Schema({ 
    street: { 
    type: String, 
    required: true 
    }, 
    house_number: { 
    type: String, 
    required: true 
    , 
    }, 
    town: { 
    type: String, 
    required: true 
    }, 
    zip: { 
    type: String, 
    required: true 
    }, 

    living_area: { 
    type: String, 
    required: true 
    }, 

    year: { 
    type: String, 
    required: true 
    }, 

    category: { 
    type: String, 

    }, 

elevator: { 
    type: String, 

    }, 

garages: { 
     type: String, 
     required: true 
    }, 

    ground_area: { 
     type: String 

     }, 


     result: { 
     date: {type: String}, 
     value: {type: String}, 
     meta: { 
      standarderror: {type: String}, 
      score: {type: String}, 
      range: { 
      min: {type: String}, 
      max: {type: String} 
      } 
     }, 
     coordinates: { 
      lat: {type: String}, 
      lng: {type: String}, 
     } 

    } 



}); 

const Evaluation = module.exports = mongoose.model('Evaluation', EvaluationSchema); 


// Get Books 
module.exports.getAll = (callback, limit) => { 
    Evaluation.find(callback).limit(limit); 
} 
+0

誰もご存知のことはありませんか? –

答えて

0

問題は、あなただけ以降の要求に関連付けられendハンドラ内で余分なデータを追加しているということです。ルート機能自体は、オンワード要求をオフにするだけですが、その前にevaluation.saveブロックと応答の送信を含む完了まで実行を続けます。

evaluation.saveres.jsonの呼び出しをendハンドラに移動して、必要なデータを収集するまで実行しないようにする必要があります。

これが意味をなさない場合は、Node.jsのイベントループをお読みください。 Thisは良い出発点です。

関連する問題