Node.jsとMongoDBを使ったログイン機能の実装をMacのlocalhostで試す
Webサービスを作りたいので、ログイン機能をlocalhostで試します。
MongoDBとNode.jsを使います。
Node.jsのインストールの説明は割愛。
MongoDBのインストールから起動まで
インストールの前処理
brew tap mongodb/brew
インストール
brew install mongodb-community
保存場所作成
sudo mkdir /var/lib/mongodb
ログ作成
sudo touch /var/log/mongodb.log
起動
sudo mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb.log
ログイン機能の実装
まず、モジュールをインストールしておきます。npm install express
npm install monogodb
下記のコードで sign up と login が出来ると思います。
server.js
constexpress=require('express');constapp=express();constbodyParser=require('body-parser');constMongoClient=require('mongodb').MongoClient;consthttp=require('http').Server(app);consturl='mongodb://localhost:27017';constdbName='myMongo';constconnectOption={useNewUrlParser:true,useUnifiedTopology:true,}consttransactionKururiDownload=async(data,res)=>{letclient;letlogin=false;try{client=awaitMongoClient.connect(url,connectOption);constdb=client.db(dbName);constcollection=db.collection('account');awaitcollection.find({}).toArray((err,docs)=>{for(constdocofdocs){if(doc.mail==data.mail){if(doc.password==data.password){login=true;res.sendFile(__dirname+"/index.html");}}}if(!login){res.send("login error");}});}catch(error){console.log(error);}finally{// client.close();}};consttransactionKururiInsert=async(data,res)=>{letclient;data=Object.assign(data,{date:newDate()});try{client=awaitMongoClient.connect(url,connectOption);constdb=client.db(dbName);constcollection=db.collection('account');consta=awaitcollection.updateOne({mail:data.mail,password:data.password,name:data.name,date:data.date},{$set:data},true);if(a.result.n==0){awaitcollection.insertOne(data);}}catch(error){console.log(error);}finally{client.close();}};app.use(bodyParser.urlencoded({extended:true}));app.use(bodyParser.json());app.get('/',(req,res)=>{res.sendFile(__dirname+"/login.html");});app.get('/signup',(req,res)=>{res.sendFile(__dirname+"/signup.html");});app.post('/signup',async(req,res)=>{letclient;letexist=false;try{client=awaitMongoClient.connect(url,connectOption);constdb=client.db(dbName);constcollection=db.collection('account');awaitcollection.find({}).toArray((err,docs)=>{console.log(docs);for(constdocofdocs){if(doc.mail==req.body.mail){console.log(req.body.mail);exist=true;}}letuser={mail:"",name:"",password:""};if(!exist&&req.body.mail!=""&&req.body.password!=""){user["mail"]=req.body.mail;user["password"]=req.body.password;user["name"]=user.mail.substr(0,user.mail.indexOf("@"));transactionKururiInsert(user,res);res.sendFile(__dirname+"/signuped.html");}else{res.sendFile(__dirname+"/signuperror.html");}});}catch(error){console.log(error);}finally{// client.close();}});app.post('/',(req,res)=>{letuser={mail:"",name:"",password:""};user["mail"]=req.body.mail;user["password"]=req.body.password;user["name"]=user.mail.substr(0,user.mail.indexOf("@"));transactionKururiDownload(user,res);});http.listen(8080,()=>{console.log('listening on :8080');});
login.html
<html><head><title>login</title></head><bodystyle="width: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center;"><formaction=""method="post"><h1>login</h1><table><tr><td>mail</td><td><inputid="mail"name="mail"type="mail"/></td></tr><tr><td>password</td><td><inputid="password"name="password"type="password"/></td></tr></table><button>send</button></form><br><ahref="signup">sign up</a></body></html>
signup.html
<html><head><title>signup</title></head><bodystyle="width: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center;"><formaction=""method="post"><h1>signup</h1><table><tr><td>mail</td><td><inputid="mail"name="mail"type="mail"/></td></tr><tr><td>password</td><td><inputid="password"name="password"type="password"/></td></tr></table><button>send</button></form></body></html>
signuped.html
<!Doctype html><html><head><title>logined</title></head><bodystyle="width: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center;"><h1>Success signup!</h1><ahref="/">please login</a></body></html>
signuperror.html
<!Doctype html><html><head><title>error</title></head><bodystyle="width: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center;"><h1>signup error</h1></body></html>
index.html
<!DOCTYPE html><html><head><title>test</title></head><body>
login success!
</body></html>