2017-03-17 101 views
0

我想請執行以下操作:節點API請求

  1. 創建新對象「評估」

  2. 獲得來自aclient數據並將其保存到該對象

  3. 使POST請求來自「評估」對象的數據

  4. 向「評估」對象添加請求響應

  5. 保存到蒙戈Db的

承滴盤看起來不錯,但我不能從POST請求對象「評估」添加響應數據。我可以訪問它。但我不能從第二個請求添加額外的數據。

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是一個很好的起點。