Node.jsのpostとgetで詰まったところ
やりたいこと
トップページ(top.ejs)内の検索ボックス(inputタグ)に入力した値を使用して検索をかける。
検索ワードを含む記事をデータベースから取得し一覧(d_search.ejs)で表示させる。
試したこと
一覧を表示させるために
d_search.jsを用意
このファイルはtop.ejsからpostした内容の処理と一覧画面を表示させるgetの処理を記述している。
d_search.js
const express = require('express');
const router = express.Router();
const connection = require('../mysqlConnection');
const multer = require('multer');//画像取得ようパッケージ(multer)読み込み
const moment = require('moment');//日付取得用パッケージ読み込み
router.post('/', (req, res) => {
// export let search = req.body.search;
console.log(req.body.search)//inputタグの値が入る
console.log("post検索:"+ req.body.search)
res.redirect('/d_search')//ここで下のget処理に移動する
});
router.get('/',(req,res)=>{
// import { search } from './d_search.js';
//ここに上のpostで取得した値を取得したい。
var sql = 'SELECT D.id, D.user_id, D.title, D.image, D.tag, D.text,ifnull(U.name, \'名無し\') AS name, DATE_FORMAT(D.created_at, \'%Y年%m月%d日 %k時%i分%s秒\') AS created_at FROM diary D LEFT OUTER JOIN user U ON D.user_id = U.user_id ORDER BY D.created_at DESC'; // 変更
res.render('d_search.ejs',{items:results})
// console.log(results)
console.log('get検索結果表示')
});
})
module.exports = router;
top.ejs(今回使用している部分を抜粋)
<form action="/d_search" method='post'>
<span class='search-bar'>店舗検索</span><input type="text" name='search' placeholder="ワード入力" required>
</form>
ターミナルで確認すると、検索の値をpostした時、
req.body.search
に検索した文字の値が格納されることを確認。
この値を変数に入れて、postの下のget記述に持っていき、var sqlで定義しているSELECT文の後半に WHERE title LIKE '%「postした変数」%'
とすれば検索結果を取得出来るのではと考えた。
しかし、d_search.jsのpostで
export let search = req.body.search;
を定義し
d_search.jsのgetで
import { search } from './d_search.js';
をimportしようとしても
SyntaxError: Unexpected token 'export'
のエラーがターミナルに表示される。
inputタグでpostした値をsqlで使用するにはどう言った処理が必要なのか
検討を続ける。