PHPなどでよくやる「index.php?id=1」の1を変えて動的にページを表示させたいだけなのですが、Nuxt.js難しくてよくわかりません。
Nuxt.js + Express + axios
バージョンはすべて最新です。
URLのパラメーターを元にaxiosでMySQLからデータを引っ張ってきて表示させたいです。
例えば、MySQLで以下のようなTABLEがあったとします。
text
1id name 21 福沢諭吉 32 夏目漱石 43 野口英世 54 新渡戸稲造 65 樋口一葉
/server/api.js
JavaScript
1const express = require('express'); 2const router = express.Router(); 3const mysql = require('mysql2/promise'); 4 5const mysqlConfig = { 6 "host": "localhost", 7 "port": 3306, 8 "user": "root", 9 "password": "", 10 "database": "test" 11}; 12 13router.get('/fuga', async (req, res, next) => { 14 try { 15 const connection = await mysql.createConnection(mysqlConfig); 16 const sql = `SELECT name FROM hoge WHERE id = ?`; 17 const [rows] = await connection.query(sql, [req.query.id]); 18 connection.end(); 19 res.send(rows[0]); 20 } catch (err) { console.error(err); } 21}); 22 23module.exports = router;
/pages/index.vue
JavaScript
1<template> 2 <section> 3 id: {{$route.query.id}} name: {{name}} 4 <br> 5 <br> 6 <nuxt-link :to="{'path':'/', 'query':{'id':1}}">ID 1</nuxt-link><br> 7 <nuxt-link :to="{'path':'/', 'query':{'id':2}}">ID 2</nuxt-link><br> 8 <nuxt-link :to="{'path':'/', 'query':{'id':3}}">ID 3</nuxt-link><br> 9 <nuxt-link :to="{'path':'/', 'query':{'id':4}}">ID 4</nuxt-link><br> 10 <nuxt-link :to="{'path':'/', 'query':{'id':5}}">ID 5</nuxt-link><br> 11 </section> 12</template> 13 14<script> 15import axios from "axios"; 16 17export default { 18 async asyncData(context) { 19 const nameStr = await axios.get("http://localhost:3000/api/fuga", { 20 params: { 21 id: context.query.id 22 } 23 }); 24 return { name: nameStr.data.name }; 25 } 26}; 27</script> 28 29<style> 30body { 31 padding: 10px; 32} 33</style>
http://localhost:3000/?id=1 にアクセスすると、
id: 1 name: 福沢諭吉
ID 1
ID 2
ID 3
ID 4
ID 5
リンクになっているID 3をクリックすると
id: 3 name: 福沢諭吉
ID 1
ID 2
ID 3
ID 4
ID 5
本来「野口英世」になっていなければならないところが「福沢諭吉」のままです。
画面を遷移させるのではなくて再描画すればいいのかと、watchQueryなどいろいろいじったのですが、どうにもうまくいきません。
どのように書けばいいのでしょうか。。。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。