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

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

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

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

0回答

792閲覧

JS/React ボタンのデクリメント処理の書き方

hiro_ike

総合スコア48

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/07/03 14:58

編集2021/07/04 03:49

JavaScript, React初心者です。

商品の一覧ページを作成して、
各商品の購入ボタンを押されたら、該当の在庫の数値を減らす処理を追加したいです。

product.qty -= 1 <- このような処理をどこかに入れるはず? と思うのですが、
この場合のルートの書き方などアドバイス頂けますと幸いです。

各ルートの設定ファイル

JavaScript

1require('dotenv').config() 2const express = require('express'); 3const app = express(); 4const PORT = process.env.PORT || 3000; 5const Product = require('./models/product') 6 7/******* 8Database Setup 9******/ 10const mongoose = require('mongoose'); 11mongoose.connect(process.env.MONGO_URI, { 12 useNewUrlParser: true, 13 useUnifiedTopology: true, 14 useCreateIndex: true, 15 useFindAndModify: false 16}) 17mongoose.connection.once('open', () => { 18 console.log('connected to mongo') 19}) 20 21 22 23app.set('view engine', 'jsx'); 24app.engine('jsx', require('express-react-views').createEngine()) 25app.use((req, res, next) => { 26 console.log('**********************') 27 console.log('***********Middleware checking in***********') 28 console.log('I run before all routes') 29 console.log('**********************') 30 next() 31}) 32 33app.use(express.urlencoded({ extended: true })) // Without this half my code wont work because i need req.body 34const methodOverride = require('method-override'); 35app.use(methodOverride('_method')); 36app.use(express.static('public')); 37 38 39/* 40Index 41*/ 42app.get('/products/', (req, res) => { 43 Product.find({}, (err, foundProducts)=>{ 44 if(err){ 45 res.status(404).send({ 46 msg: err.message 47 }) 48 } else { 49 res.render('Index', { 50 products: foundProducts 51 }) 52 } 53 }) 54}) 55 56/* 57New 58*/ 59app.get('/products/new', (req, res) => { 60 res.render('New') 61}) 62 63/* 64Destroy 65*/ 66app.delete('/products/:id', (req, res) => { 67 Product.findByIdAndDelete(req.params.id, (err, foundProduct)=>{ 68 if(err){ 69 res.status(404).send({ 70 msg: err.message 71 }) 72 } else { 73 res.redirect('/products') 74 } 75 }) 76}) 77 78/* 79Update 80*/ 81app.put('/products/:id', (req, res) => { 82 Product.findByIdAndUpdate(req.params.id, req.body, { new: true }, (err, updatedProduct)=>{ 83 if(err){ 84 res.status(404).send({ 85 msg: err.message 86 }) 87 } else { 88 res.render('Show', { 89 product: updatedProduct 90 }) 91 } 92 }) 93}) 94 95/* 96Create 97*/ 98app.post('/products', (req, res) =>{ 99 Product.create(req.body, (err, createdProduct ) => { 100 if(err){ 101 res.status(404).send({ 102 msg: err.message 103 }) 104 } else { 105 console.log(createdProduct); 106 res.redirect('/products') 107 } 108}) 109}) 110 111/* 112Edit 113*/ 114app.get('/products/:id/edit', (req, res) => { 115 Product.findById(req.params.id, (err, foundProduct)=>{ 116 if(err){ 117 res.status(404).send({ 118 msg: err.message 119 }) 120 } else { 121 res.render('Edit', { 122 product: foundProduct 123 }) 124 } 125 }) 126}) 127 128/* 129Show 130*/ 131app.get('/products/:id', (req, res) => { 132 Product.findById(req.params.id, (err, foundProduct)=>{ 133 if(err){ 134 res.status(404).send({ 135 msg: err.message 136 }) 137 } else { 138 res.render('Show', { 139 product: foundProduct 140 }) 141 } 142 }) 143}) 144 145/* 146Buy *ココ作業中 147とりあえずUpdateのルートをコピペ 148product.qty -= 1 <- こんなのをどこかに入れるはず? 149*/ 150app.put('/products/:id', (req, res) => { 151 Product.findByIdAndUpdate(req.params.id, req.body, { new: true }, (err, updatedProduct)=>{ 152 if(err){ 153 res.status(404).send({ 154 msg: err.message 155 }) 156 } else { 157 res.render('Show', { 158 product: updatedProduct 159 }) 160 } 161 }) 162}) 163 164 165app.listen(PORT, () => { 166console.log('We in the building', PORT) 167}) 168

一覧ページ

JSX

1const React = require('react') 2const DefaultLayout = require('./layouts/Default'); 3class Index extends React.Component { 4 render(){ 5 const products = this.props.products; 6 return ( 7 <DefaultLayout title={"Shop Page"} styles={[{key: 0, href: '/css/app.css'}, { key: 1, href: '/css/indexpage.css'}]}> 8 <h1></h1> 9 <ul> 10 { 11 products.map((product)=>{ 12 return( 13 <li key={product._id} id="column"> 14 <a href={`/products/${product._id}`}><font color="silver">{product.name}{product.description}</font></a> 15 <form method="POST" action={`/products/${product._id}?_method=DELETE`}> 16 <img src={product.img} width="295px" height="393px" ></img> 17 <input type="submit" value="DELETE"/> 18 <br /> 19 <font color="silver">In stock: {product.qty}</font> 20 <input type="submit" value="Buy"/> 21 </form> 22 <a href={`/products/${product._id}/edit`}><font color="silver">Edit This Product</font></a> 23 </li> 24 ) 25 }) 26 } 27 </ul> </DefaultLayout> 28 ) 29 } 30} 31 32module.exports = Index; 33

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問