質問編集履歴

3

更新

2019/04/05 02:58

投稿

kanetugu_70e
kanetugu_70e

スコア100

test CHANGED
File without changes
test CHANGED
File without changes

2

文言修正

2019/04/05 02:58

投稿

kanetugu_70e
kanetugu_70e

スコア100

test CHANGED
File without changes
test CHANGED
@@ -4,33 +4,35 @@
4
4
 
5
5
  具体的には、"index.js"⇒"users.js"です。
6
6
 
7
+
8
+
7
- 以下にファイル構成を記載します。
9
+ ファイル構成は以下の通りです。
8
-
9
-
10
-
10
+
11
+
12
+
11
- アプリケーションルート
13
+ /:(アプリルート)
12
-
14
+
13
- |-app.js
15
+ --app.js
14
-
16
+
15
- |-routes
17
+ --routes
16
-
18
+
17
- | |-index.js
19
+  |--index.js
18
-
20
+
19
- | |-users.js
21
+  |--users.js
20
-
22
+
21
- | .
23
+  |
22
-
24
+
23
- . .
25
+  ・
26
+
24
-
27
+ ・  ・
25
-
26
28
 
27
29
  ### 状況
28
30
 
29
- 以下については問題なく動作する事を確認済みです。(URLは"localhost:3000"省略)
31
+ 以下については問題なく動作する事を確認済みです。(URLは"localhost:3000"省略)
30
32
 
31
33
  - URL"/users/add"等、他のルーティングは問題なくページ表示まで完了します。
32
34
 
33
- - 問題になっているindex.jsのリダイレクト処理res.redirect('/users'.....)の部分を、res.redirect('/users/test'.....)などにし、users.js側も"router.get('/test'.....)とすると、問題なくページ表示まで完了します。
35
+ - 問題になっているindex.jsのリダイレクト処理res.redirect('/users'.....)の部分を、res.redirect('/users/test'.....)などにし、users.js側も"router.get('/test'.....)とすると、問題なくページ表示まで完了します。(ただ、app.jsで指定した"/users"でリダイレクト出来る様にしたいです。)
34
36
 
35
37
  - 以上から、app.js側のルーティングは問題ないと考えております。
36
38
 
@@ -46,7 +48,9 @@
46
48
 
47
49
  ```javascript
48
50
 
49
- #app.js
51
+ ##app.js
52
+
53
+
50
54
 
51
55
  [抜粋]
52
56
 
@@ -72,7 +76,9 @@
72
76
 
73
77
  ```javascript
74
78
 
75
- #index.js
79
+ ##index.js
80
+
81
+
76
82
 
77
83
  var express = require('express');
78
84
 
@@ -132,14 +138,12 @@
132
138
 
133
139
 
134
140
 
135
- /* GET home page. */
141
+ /* Redirect "users.js". -------------------------------------------------*/
136
142
 
137
143
  router.get('/', (req, res,next)=>{
138
144
 
139
145
  if(req.session.login==null){
140
146
 
141
- console.log('BP!');
142
-
143
147
  res.redirect('/users');
144
148
 
145
149
  }else{
@@ -156,7 +160,7 @@
156
160
 
157
161
  if(req.session.login==null){
158
162
 
159
- res.redirect('../users');
163
+ res.redirect('/users');
160
164
 
161
165
  return;
162
166
 
@@ -224,7 +228,9 @@
224
228
 
225
229
  ```javascript
226
230
 
227
- #users.js
231
+ ##users.js
232
+
233
+
228
234
 
229
235
  var express=require('express');
230
236
 
@@ -340,6 +346,8 @@
340
346
 
341
347
 
342
348
 
349
+ /*↓Redirect location-----------------------------------------------------------*/
350
+
343
351
  router.get('/',(req,res,next)=>{
344
352
 
345
353
  var data={
@@ -454,7 +462,9 @@
454
462
 
455
463
  ```json
456
464
 
457
- #package.json
465
+ ##package.json
466
+
467
+
458
468
 
459
469
  {
460
470
 

1

コード修正

2019/04/02 15:43

投稿

kanetugu_70e
kanetugu_70e

スコア100

test CHANGED
File without changes
test CHANGED
@@ -140,59 +140,219 @@
140
140
 
141
141
  console.log('BP!');
142
142
 
143
+ res.redirect('/users');
144
+
145
+ }else{
146
+
147
+ res.redirect('/1');
148
+
149
+ }
150
+
151
+ });
152
+
153
+
154
+
155
+ router.get('/:page',(req,res,next)=>{
156
+
157
+ if(req.session.login==null){
158
+
143
159
  res.redirect('../users');
144
160
 
145
- }else{
161
+ return;
146
-
147
- res.redirect('/1');
148
162
 
149
163
  }
150
164
 
165
+ var pg=req.params.page;
166
+
167
+ pg*=1;
168
+
169
+ if(pg<1){pg=1;}
170
+
171
+ new Message().orderBy('created_at','DESC')
172
+
173
+ .fetchPage({page:pg,pageSize:10,withRelated:['user']})
174
+
175
+ .then((collection)=>{
176
+
177
+ var data={
178
+
179
+ title:'miniBoard',
180
+
181
+ login:req.session.login,
182
+
183
+ collection:collection.toArray(),
184
+
185
+ pagination:collection.pagination
186
+
187
+ };
188
+
189
+ res.render('index',data);
190
+
191
+ }).catch((err)=>{
192
+
193
+ res.status(500).json({error:true,data:{message:err.message}});
194
+
151
- });
195
+ });
196
+
152
-
197
+ });
153
-
154
-
198
+
199
+
200
+
155
- router.get('/:page',(req,res,next)=>{
201
+ router.post('/',(req,res,next)=>{
202
+
156
-
203
+ var rec={
204
+
205
+ message:req.body.msg,
206
+
157
- if(req.session.login==null){
207
+ user_id:req.session.login.id
208
+
158
-
209
+ };
210
+
211
+ new Message(rec).save().then((model)=>{
212
+
159
- res.redirect('../users');
213
+ res.redirect('/');
214
+
160
-
215
+ });
216
+
217
+ });
218
+
219
+
220
+
221
+ module.exports = router;
222
+
223
+ ```
224
+
225
+ ```javascript
226
+
227
+ #users.js
228
+
229
+ var express=require('express');
230
+
231
+ var router=express.Router();
232
+
233
+
234
+
235
+ var mysql=require('mysql');
236
+
237
+ var knex=require('knex')({
238
+
239
+ client:'mysql',
240
+
161
- return;
241
+ connection:{
242
+
243
+ host:'localhost',
244
+
245
+ user:'root',
246
+
247
+ password:'root',
248
+
249
+ database:'nodeapp',
250
+
251
+ charset:'utf8'
162
252
 
163
253
  }
164
254
 
255
+ });
256
+
257
+ var Bookshelf=require('bookshelf')(knex);
258
+
259
+
260
+
261
+ var User=Bookshelf.Model.extend({
262
+
263
+ tableName:'users'
264
+
265
+ });
266
+
267
+
268
+
269
+ router.get('/add',(req,res,next)=>{
270
+
271
+ var data={
272
+
273
+ title:'Users',
274
+
275
+ form:{name:'',password:'',comment:''},
276
+
277
+ content:'登録する名前・パスワード・コメントを入力してください'
278
+
279
+ };
280
+
281
+ res.render('users/add',data);
282
+
283
+ });
284
+
285
+
286
+
287
+ router.post('/add',(req,res,next)=>{
288
+
289
+ var request=req;
290
+
165
- var pg=req.params.page;
291
+ var response=res;
292
+
166
-
293
+ req.check('name','NAMEは必ず入力してください').notEmpty();
294
+
295
+ req.check('password','PASSWORDは必ず入力してください').notEmpty();
296
+
167
- pg*=1;
297
+ req.getValidationResult().then((result)=>{
168
-
298
+
169
- if(pg<1){pg=1;}
299
+ if(!result.isEmpty()){
300
+
170
-
301
+ var content='<ul class="error">';
302
+
303
+ var result_arr=result.array();
304
+
305
+ for(var i in result_arr){
306
+
171
- new Message().orderBy('created_at','DESC')
307
+ content+='<li>'+result_arr[n].msg+'</li>';
308
+
172
-
309
+ }
310
+
173
- .fetchPage({page:pg,pageSize:10,withRelated:['user']})
311
+ content+='</ul>';
174
-
175
- .then((collection)=>{
176
312
 
177
313
  var data={
178
314
 
179
- title:'miniBoard',
315
+ title:'Users/Add',
180
-
181
- login:req.session.login,
316
+
182
-
183
- collection:collection.toArray(),
317
+ content:content,
184
-
318
+
185
- pagination:collection.pagination
319
+ form:req.body
186
320
 
187
321
  };
188
322
 
189
- res.render('index',data);
323
+ response.render('/users/add',data);
324
+
190
-
325
+ }else{
326
+
327
+ request.session.login=null;
328
+
191
- }).catch((err)=>{
329
+ new User(req.body).save().then((model)=>{
192
-
330
+
193
- res.status(500).json({error:true,data:{message:err.message}});
331
+ response.redirect('/');
194
-
332
+
195
- });
333
+ });
334
+
335
+ }
336
+
337
+ });
338
+
339
+ });
340
+
341
+
342
+
343
+ router.get('/',(req,res,next)=>{
344
+
345
+ var data={
346
+
347
+ title:'Users/Login',
348
+
349
+ form:{name:'',password:''},
350
+
351
+ content:'名前とパスワードを入力してください'
352
+
353
+ };
354
+
355
+ res.render('users/login',data);
196
356
 
197
357
  });
198
358
 
@@ -200,17 +360,87 @@
200
360
 
201
361
  router.post('/',(req,res,next)=>{
202
362
 
363
+ var request=req;
364
+
365
+ var response=res;
366
+
367
+ req.check('name','nameは必ず入力してください').notEmpty();
368
+
369
+ req.check('password','passwordは必ず入力してください').notEmpty();
370
+
371
+ req.getValidationResult().then((result)=>{
372
+
373
+ if(!result.isEmpty()){
374
+
375
+ var content='<ul class="error">';
376
+
377
+ var result_arr=result.array();
378
+
379
+ for(var i in result_arr){
380
+
381
+ content+='<li>'+result_arr[i].msg+'</li>';
382
+
383
+ }
384
+
385
+ content+='</ul>';
386
+
203
- var rec={
387
+ var data={
388
+
204
-
389
+ title:'Users/Login',
390
+
391
+ content:content,
392
+
393
+ form:req.body
394
+
395
+ }
396
+
397
+ response.render('users/login',data);
398
+
399
+ }else{
400
+
205
- message:req.body.msg,
401
+ var nm=req.body.name;
206
-
402
+
207
- user_id:req.session.login.id
403
+ var pw=req.body.password;
404
+
208
-
405
+ User.query({where:{name:nm},andWhere:{password:pw}})
406
+
407
+ .fetch().then((model)=>{
408
+
409
+ if(model==null){
410
+
411
+ var data={
412
+
413
+ title:'再入力',
414
+
415
+ content:'<p class="error">名前又はパスワードが違います</p>',
416
+
417
+ form:req.body
418
+
209
- };
419
+ };
210
-
211
- new Message(rec).save().then((model)=>{
420
+
212
-
213
- res.redirect('/');
421
+ response.render('users/login',data);
422
+
423
+ }else{
424
+
425
+ request.session.login=model.attributes;
426
+
427
+ var data={
428
+
429
+ title:'Users/login',
430
+
431
+ content:'<p>ログインしました</p>',
432
+
433
+ form:req.body
434
+
435
+ };
436
+
437
+ response.render('users/login',data);
438
+
439
+ }
440
+
441
+ });
442
+
443
+ }
214
444
 
215
445
  });
216
446
 
@@ -218,288 +448,58 @@
218
448
 
219
449
 
220
450
 
221
- module.exports = router;
451
+ module.exports=router;
222
452
 
223
453
  ```
224
454
 
225
- ```javascript
455
+ ```json
226
-
456
+
227
- #users.js
457
+ #package.json
458
+
228
-
459
+ {
460
+
461
+ "name": "mini-board2",
462
+
463
+ "version": "0.0.0",
464
+
465
+ "private": true,
466
+
467
+ "scripts": {
468
+
469
+ "start": "node ./bin/www"
470
+
471
+ },
472
+
473
+ "dependencies": {
474
+
475
+ "bookshelf": "^0.14.2",
476
+
477
+ "cookie-parser": "~1.4.3",
478
+
479
+ "debug": "~2.6.9",
480
+
481
+ "ejs": "~2.5.7",
482
+
229
- var express=require('express');
483
+ "express": "~4.16.0",
484
+
230
-
485
+ "express-session": "^1.15.6",
486
+
487
+ "express-validator": "^5.3.1",
488
+
489
+ "http-errors": "~1.6.2",
490
+
491
+ "knex": "^0.16.3",
492
+
231
- var router=express.Router();
493
+ "morgan": "~1.9.0",
232
-
233
-
234
-
494
+
235
- var mysql=require('mysql');
495
+ "mysql": "^2.16.0"
236
-
237
- var knex=require('knex')({
238
-
239
- client:'mysql',
240
-
241
- connection:{
242
-
243
- host:'localhost',
244
-
245
- user:'root',
246
-
247
- password:'root',
248
-
249
- database:'nodeapp',
250
-
251
- charset:'utf8'
252
496
 
253
497
  }
254
498
 
255
- });
256
-
257
- var Bookshelf=require('bookshelf')(knex);
258
-
259
-
260
-
261
- var User=Bookshelf.Model.extend({
262
-
263
- tableName:'users'
264
-
265
- });
266
-
267
-
268
-
269
- router.get('/add',(req,res,next)=>{
270
-
271
- var data={
272
-
273
- title:'Users',
274
-
275
- form:{name:'',password:'',comment:''},
276
-
277
- content:'登録する名前・パスワード・コメントを入力してください'
278
-
279
- };
280
-
281
- res.render('users/add',data);
282
-
283
- });
284
-
285
-
286
-
287
- router.post('/add',(req,res,next)=>{
288
-
289
- var request=req;
290
-
291
- var response=res;
292
-
293
- req.check('name','NAMEは必ず入力してください').notEmpty();
294
-
295
- req.check('password','PASSWORDは必ず入力してください').notEmpty();
296
-
297
- req.getValidationResult().then((result)=>{
298
-
299
- if(!result.isEmpty()){
300
-
301
- var content='<ul class="error">';
302
-
303
- var result_arr=result.array();
304
-
305
- for(var i in result_arr){
306
-
307
- content+='<li>'+result_arr[n].msg+'</li>';
308
-
309
- }
499
+ }
310
-
311
- content+='</ul>';
312
-
313
- var data={
314
-
315
- title:'Users/Add',
316
-
317
- content:content,
318
-
319
- form:req.body
320
-
321
- };
322
-
323
- response.render('/users/add',data);
324
-
325
- }else{
326
-
327
- request.session.login=null;
328
-
329
- new User(req.body).save().then((model)=>{
330
-
331
- response.redirect('/');
332
-
333
- });
334
-
335
- }
336
-
337
- });
338
-
339
- });
340
-
341
-
342
-
343
- router.get('/',(req,res,next)=>{
344
-
345
- var data={
346
-
347
- title:'Users/Login',
348
-
349
- form:{name:'',password:''},
350
-
351
- content:'名前とパスワードを入力してください'
352
-
353
- };
354
-
355
- res.render('users/login',data);
356
-
357
- });
358
-
359
-
360
-
361
- router.post('/',(req,res,next)=>{
362
-
363
- var request=req;
364
-
365
- var response=res;
366
-
367
- req.check('name','nameは必ず入力してください').notEmpty();
368
-
369
- req.check('password','passwordは必ず入力してください').notEmpty();
370
-
371
- req.getValidationResult().then((result)=>{
372
-
373
- if(!result.isEmpty()){
374
-
375
- var content='<ul class="error">';
376
-
377
- var result_arr=result.array();
378
-
379
- for(var i in result_arr){
380
-
381
- content+='<li>'+result_arr[i].msg+'</li>';
382
-
383
- }
384
-
385
- content+='</ul>';
386
-
387
- var data={
388
-
389
- title:'Users/Login',
390
-
391
- content:content,
392
-
393
- form:req.body
394
-
395
- }
396
-
397
- response.render('users/login',data);
398
-
399
- }else{
400
-
401
- var nm=req.body.name;
402
-
403
- var pw=req.body.password;
404
-
405
- User.query({where:{name:nm},andWhere:{password:pw}})
406
-
407
- .fetch().then((model)=>{
408
-
409
- if(model==null){
410
-
411
- var data={
412
-
413
- title:'再入力',
414
-
415
- content:'<p class="error">名前又はパスワードが違います</p>',
416
-
417
- form:req.body
418
-
419
- };
420
-
421
- response.render('users/login',data);
422
-
423
- }else{
424
-
425
- request.session.login=model.attributes;
426
-
427
- var data={
428
-
429
- title:'Users/login',
430
-
431
- content:'<p>ログインしました</p>',
432
-
433
- form:req.body
434
-
435
- };
436
-
437
- response.render('users/login',data);
438
-
439
- }
440
-
441
- });
442
-
443
- }
444
-
445
- });
446
-
447
- });
448
-
449
-
450
-
451
- module.exports=router;
452
500
 
453
501
  ```
454
502
 
455
- ```json
456
-
457
- #package.json
458
-
459
- {
460
-
461
- "name": "mini-board2",
462
-
463
- "version": "0.0.0",
464
-
465
- "private": true,
466
-
467
- "scripts": {
468
-
469
- "start": "node ./bin/www"
470
-
471
- },
472
-
473
- "dependencies": {
474
-
475
- "bookshelf": "^0.14.2",
476
-
477
- "cookie-parser": "~1.4.3",
478
-
479
- "debug": "~2.6.9",
480
-
481
- "ejs": "~2.5.7",
482
-
483
- "express": "~4.16.0",
484
-
485
- "express-session": "^1.15.6",
486
-
487
- "express-validator": "^5.3.1",
488
-
489
- "http-errors": "~1.6.2",
490
-
491
- "knex": "^0.16.3",
492
-
493
- "morgan": "~1.9.0",
494
-
495
- "mysql": "^2.16.0"
496
-
497
- }
498
-
499
- }
500
-
501
- ```
502
-
503
503
 
504
504
 
505
505
  ### 環境