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

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

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

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

Node.js

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

Express

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

Q&A

解決済

1回答

607閲覧

【Node.js】passport.jsのregisterを使ってDBに保存したい

paccuman

総合スコア13

MongoDB

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

Node.js

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

Express

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

0グッド

0クリップ

投稿2020/03/21 13:15

編集2020/03/23 10:23

「入門Node.jsプログラミング」(書籍)のexpressフレームワークを用いたコーディングの中で、
passportモジュールを利用し、passwordをハッシュ化してユーザーデータを新規登録する記述についてです。
usersController.jsのcreateのregisterメソッドでのDBへの保存に失敗します。

【質問】
■エラーの原因について
どこを修正したらDBに保存できる可能性がありますでしょうか

■registerメソッドについて
registerメソッドがどのようなものかも教えていただけますと幸いです。

【検証したこと】
・userモデルにpassport-local-mongooseモジュールをプラグインし、リクエストされたpasswordがハッシュ化されるまで確認できました。
・registerメソッドの第二引数のuserがundefinedでした。

javascript

1//user.js 2const 3mongoose = require('mongoose'), 4passportLocalMongoose = require('passport-local-mongoose') 5; 6 7const {Schema} = mongoose, 8userSchema = new Schema({ 9 name:{ 10 first:{ 11 type:String, 12 trim:true 13 }, 14 last:{ 15 type:String, 16 trim:true 17 } 18 }, 19 email:{ 20 type:String, 21 required:true, 22 lowercase:true, 23 unique:true 24 }, 25 zipCode:{ 26 type:Number, 27 min:[10000,'not correct'], 28 max:99999 29 } 30}); 31 32userSchema.plugin(passportLocalMongoose,{ 33 usernameField: 'email' 34}); 35 36module.exports = mongoose.model('User', userSchema);

javascript

1//usersController.js 2const User = require('../models/user'); 3 4const getUserParams = body =>{ 5 return{ 6 name:{ 7 first: body.first, 8 last: body.last 9 }, 10 email: body.email, 11 zipCode: body.zipCode 12 }; 13}; 14 15module.exports = { 16//(略) 17 create:(req,res,next)=>{ 18 let newUser = new User(getUserParams(req.body)); 19 console.log(newUser); //req.body.passwordがsalt,hash化されている 20 21 User.register(newUser,req.body.password, (error,user) => { 22 console.log(user); //undefined 23 if(user){ 24 //ユーザー作成成功 25 req.flash( 26 'success', 27 `${fullName}:新規登録成功` 28 ); 29 res.locals.redirect = '/users'; 30 next(); 31 }else{ 32 //ユーザー作成失敗 33 req.flash( 34 'error', 35 '新規登録失敗' 36 ); 37 res.locals.redirect = '/users/new'; 38 next(); 39 } 40 }); 41 }, 42 43 redirectView:(req,res,next)=>{ 44 let redirectPath = res.locals.redirect; 45 if(redirectPath) res.redirect(redirectPath); 46 else next(); 47 } 48};

javascript

1//package.json 2{ 3 "name": "express_templates", 4 "version": "1.0.0", 5 "description": "", 6 "main": "main.js", 7 "scripts": { 8 "test": "echo \"Error: no test specified\" && exit 1", 9 "start": "node main.js" 10 }, 11 "author": "", 12 "license": "ISC", 13 "dependencies": { 14 "bcrypt": "^4.0.1", 15 "body-parser": "^1.19.0", 16 "connect-flash": "^0.1.1", 17 "cookie-parser": "^1.4.5", 18 "ejs": "^3.0.1", 19 "express": "^4.17.1", 20 "express-ejs-layouts": "^2.5.0", 21 "express-session": "^1.17.0", 22 "express-validator": "^6.4.0", 23 "http-status-codes": "^1.4.0", 24 "method-override": "^3.0.0", 25 "mongo": "^0.1.0", 26 "mongoose": "^5.9.3", 27 "passport": "^0.4.1", 28 "passport-local": "^1.0.0", 29 "passport-local-mongoose": "^6.0.1" 30 } 31}

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。
register内の${user.fullName}記述ミスと、express-validatorを最新版の記述にしました。

エラーとデバック内容の読み違いをし、そもそものエラー箇所を誤って認識してました。。

結果的に、どちらかと言うと正常に機能していなかったvalidatorの記述を正し、
再度デバックを重ね、現在は問題なくvalidatorとハッシュ化したデータをDBに登録できるようになりました。

投稿2020/03/23 14:02

paccuman

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問