2016-11-28 64 views
0

我有一個調用函數內的SQL查詢的API請求。我試圖將結果傳遞給.vue頁面。 (使用快速-VUE)這裏是API請求如何將結果從db查詢傳遞給Vue?

router.get('/search', (req, res, next) => { 

    var keyword = ("%" + req.query.keyword + "%") 
    var lat = req.query.lat 
    var lng = req.query.lng 

    console.log(keyword, lat, lng) 

    connection.query('SELECT *, (3959 * acos (cos (radians(?))* cos(radians(lat))* cos(radians(lng) - radians(?))+ sin (radians(?))* sin(radians(lat)))) AS distance FROM job_posting where job_title like ? HAVING distance < 25', [ 
     lat, lng, lat, keyword 
    ], function(err, rows) { 

    }) 
    res.render('main', { 
    // data: { 
    //   results 
    //   }, 
    vue: { 
     meta: { 
      title: 'Page Title', 
     }, 
     components: ['myheader', 'myfooter', 'searchform', , 'results'] 
    } 

}); 
}) 

和Main.vue頁

<template> 
<div id="wrap"> 
    <div class="col-md-1"></div> 
    <div id="main-container" class="container col-md-10"> 

     <myheader></myheader> 
     <div class="col-md-4"></div> 
     <div class="col-md-4"> 
     <searchform></searchform> 
     <results></results> 


     </div> 
     <div class="col-md-4 text-center"> 

     </div> 
     <div class="col-md-1"></div> 


    </div> 
</div> 
</template> 

進出口試圖將數據傳遞到該組件results.vue

<template> 

<p>Display data</p> 

</template> 

<script> 
export default { 
    data: function() { 
     return { 
      // dogs: 3 
     } 
    } 
} 
</script> 

<style lang="css"> 
</style> 

如何將「行」數據傳遞到results.vue頁面?

這裏是如何將數據從DB

[ RowDataPacket { 
    id: 1, 
    job_title: 'Software Engineer', 
    job_desc: '<p>Ayo</p>', 
    location: 'Akron, OH', 
    job_type: 'Full-Time', 
    salary: '', 
    date_created: 2016-11-23T05:00:00.000Z, 
    short_desc: '[email protected]', 
    apply_url: 'Ayo', 
    lat: '41.084821', 
    lng: '-81.515607', 
    distance: 0 }, 
    RowDataPacket { 
    id: 2, 
    job_title: 'Software Engineer', 
    job_desc: '<p>Ayo</p>', 
    location: 'Akron, OH', 
    job_type: 'Full-Time', 
    salary: '', 
    date_created: 2016-11-23T05:00:00.000Z, 
    short_desc: '[email protected]', 
    apply_url: 'Ayo', 
    lat: '41.084821', 
    lng: '-81.515607', 
    distance: 0 }, 
    RowDataPacket { 
    id: 3, 
    job_title: 'Software Engineer', 
    job_desc: '<p>Ayo</p>', 
    location: 'Akron, OH', 
    job_type: 'Full-Time', 
    salary: '', 
    date_created: 2016-11-23T05:00:00.000Z, 
    short_desc: '[email protected]', 
    apply_url: 'Ayo', 
    lat: '41.084821', 
    lng: '-81.515607', 
    distance: 0 } ] 
+1

看起來像你有一個Main.vue,它有一個Results.vue組件。通常使用道具將數據從父組件傳遞給子組件。所以它應該像,其中的結果是Main.vue上的一個數據屬性(它看起來像你註釋掉的)。您還需要將回調內部的渲染移動到@johnnynotsolucky的答案中。 – Bert

回答

0

我不知道快遞-VUE到來,但我不認爲從路由定義進行API調用是一個好主意。

而是通過您的results部件通過latlng參數,並作出API調用在那裏,使用方法或created()鉤例如。這可以使它更容易一點改變API在未來實現:

res.render('main', { 
    data: { 
    lat, 
    lng, 
    }, 
    vue: { 
    meta: { 
    title: 'Page Title', 
    }, 
    components: ['myheader', 'myfooter', 'searchform', , ' 
} 

編輯

如果你真的需要從路由查詢數據,並假設rows是一個數組JavaScript對象,你可以查詢的回調中呈現您的組件:

connection.query('SELECT *, (3959 * acos (cos (radians(?))* cos(radians(lat))* cos(radians(lng) - radians(?))+ sin (radians(?))* sin(radians(lat)))) AS distance FROM job_posting where job_title like ? HAVING distance < 25', [ 
    lat, lng, lat, keyword 
], function(err, rows) { 
    res.render('main', { 
    data: { 
     results: rows 
    }, 
    vue: { 
     meta: { 
     title: 'Page Title', 
    }, 
    components: ['myheader', 'myfooter', 'searchform', 'results'] 
    } 
    next(); // You probably need to call this 
}) 

不要忘記調用next()

+0

我需要將數據庫結果中的對象作爲數據傳遞給組件。對不起,我應該更好地解釋這一部分。所以基本上我需要傳遞來自sql查詢的「行」結果。 – bbennett36

+0

已更新。我最初的意思是,你可以從組件內部或者從其他外部模塊執行查詢,而不是在路由本身內部執行該查詢,這種邏輯可能會扭曲路由的意圖,並且可能使查詢更難。 – johnnynotsolucky

+0

聽起來不錯。我會測試這個解決方案並回報。謝謝! – bbennett36

相關問題