質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

2回答

821閲覧

node.js(Express)を使用してのRESTful環境構築でinsert文がうまく作動しない

holic

総合スコア134

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2022/02/15 08:03

編集2022/02/15 08:27

前提・実現したいこと

node.js(Express)を使用し、mysqlのDBからRESTful環境構築を考えております。
CRUD機能の実装を進めており、『全件表示』『一件表示』『削除する』と順調に進めておりましたが、
新規追加する』でつまずいております。
ソースを下記に記します。

該当のソースコード

DBの状態
イメージ説明

js

1const mysql = require('mysql'); 2const express = require('express'); 3var app = express(); 4const bodyparser = require('body-parser'); 5 6app.use(bodyparser.json()); 7 8var mysqlConnection = mysql.createConnection({ 9 host: '127.0.0.1', 10 user: 'root', 11 password: 'root123', 12 database: 'express41', 13 mulipleStatements:true 14}); 15 16mysqlConnection.connect((err) => { 17 if (!err) 18 console.log('DB connection succeded.'); 19 else 20 console.log('DB connection failed \n Error : ' + JSON.stringify(err, undefined, 2)); 21}); 22 23 24app.listen(3000, () => console.log('Express server is runnig at port no : 3000')); 25 26 27//全件表示 28app.get('/users', (req, res) => { 29 mysqlConnection.query('SELECT * FROM users', (err, rows, fields) => { 30 if (!err) 31 res.send(rows); 32 else 33 console.log(err); 34 }) 35}); 36 37//一件表示 38app.get('/users/:id', (req, res) => { 39 mysqlConnection.query('SELECT * FROM users WHERE ID = ?', [req.params.id], (err, rows, fields) => { 40 if (!err) 41 res.send(rows); 42 else 43 console.log(err); 44 }) 45}); 46 47//削除する 48app.delete('/users/:id', (req, res) => { 49 mysqlConnection.query('DELETE FROM users WHERE ID = ?', [req.params.id], (err, rows, fields) => { 50 if (!err) 51 res.send(rows); 52 else 53 console.log(err); 54 }) 55}); 56 57//新規追加する 58app.post('/users', (req, res) => { 59 const data = {id:req.body.id,name:req.body.name,email:req.body.email}; 60 61 let sql = "INSERT INTO users SET ?" 62 let query = mysqlConnection.query(sql,data,(err,results) => { 63 if(err) throw err; 64 //console.log(results); 65 res.redirect('/'); 66 }) 67}); 68

『 全件表示』をpostmanで確認

イメージ説明

API確認ツールとして「postman」を利用してtestを実施しております。
全件表示は問題なく出来ているので、「DBの接続」に問題無いと考えております。

発生している問題・エラーメッセージ

postmanにてhttp://localhost:3000/users/に新規ユーザ情報を投稿してみました。
イメージ説明
イメージ説明

新規でユーザー登録はされたものの、目的とするコンテンツが入ってないのが問題点です。
ここをどのように変更したら、正しく「新規追加」できるようになるのか、ご意見を頂けましたら幸いでございます。
どうぞよろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

node.js 12.22.10
npm 8.5.0
express 4.17.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

その後再考をしてみましたが、どうやらPostmanでのpostのやり方に問題があったみたいです。
具体的には、postする際に「Body」「raw」、を選択した後に「Json」に変更する必要があるみたいです。
参考記事はこちら

イメージ説明

投稿2022/02/17 20:53

holic

総合スコア134

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

INSERT以外ではSQLでパラメータの?を使って、きっちり配列で渡しているのに
INSERTではそのようにしていないのは理由があるのですか?
nodeのmysqlはわかりませんがDELETEやSELECTの書き方に合わせるべきなのでは?

js

1 let sql = "INSERT INTO users SET name=?,email=?" 2 let query = mysqlConnection.query(sql,[req.body.name,req.body.email],(err,results) => {

↑未確認ですが他を見るにこんな感じでは?

一つのパラメータに一つの値が入るというのが一般的な認識だと思うのですが

js

1 let sql = "INSERT INTO users SET ?"

と書いて「?」の部分に

js

1 const data = {id:req.body.id,name:req.body.name,email:req.body.email};

これを渡した結果SQLが

SQL

1INSERT INTO users SET id=xxx,name=xxx,email=xxx

という風になるというのはちょっと予想できません。リファレンスは確認してませんが。

投稿2022/02/16 02:40

sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

holic

2022/02/17 20:55

【sousuke】様 おかげさまで自己解決に至りました。 お力添えに大変に感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問