Maison interface Web js tutoriel Implémenter le code de fonction d'enregistrement de connexion (Node.js+Express+MongoDB)

Implémenter le code de fonction d'enregistrement de connexion (Node.js+Express+MongoDB)

May 02, 2017 am 10:04 AM

Cet article présente principalement la fonction de connexion et d'enregistrement de Node+Express+MongoDB. Les amis qui en ont besoin peuvent se référer à

Injecter la dépendance MongoDB


.

var mongoose = require("mongoose");
Copier après la connexion

En raison de la nécessité de traiter le formulaire, le middleware bodyParser

le module bodyParser est nécessaire pour effectuer l'analyse des fichiers et formater les données dans le formulaire


var bodyParser = require("body-parser"); 
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
Copier après la connexion

Pour enregistrer les informations utilisateur après vous être connecté, vous devez utiliser le middleware de session, qui s'appuie sur le middleware cookieParser


var cookieParser = require('cookie-parser');
var session = require('express-session');
ar mongoStore = require('connect-mongo')(session);
var dbUrl = 'mongodb://localhost/express';
app.use(cookieParser()); 
app.use(session({
 secret:'express',
 store: new mongoStore({
 url: dbUrl,
 collection: 'sessions'
 })
}));
Copier après la connexion

Utiliser le modèle Jade

layout.jade


doctype html
html
 head
  meta(charset='utf-8')
  title #{title}
  include ./includes/head
 body
  include ./includes/header
  block content
Copier après la connexion

head.jade


link(href='css/main.css', rel='stylesheet')
link(href="/libs/bootstrap/dist/css/bootstrap.min.css" rel="external nofollow" , rel="stylesheet")
script(src="/libs/jquery/dist/jquery.min.js")
script(src="/libs/bootstrap/dist/js/bootstrap.min.js")
Copier après la connexion

en-tête. jade


.container
 .row
  .page-header
   h1 #{title}
.navbar.navbar-default.navbar-fixed-bottom
 .container
  if user
   p.navbar-text.navbar-right
    span 欢迎你,#{user.name}
    span  | 
    a.navbar-link(href="/layout" rel="external nofollow" ) 退出登录
  else
   p.navbar-text.navbar-right
    a.navbar-link(href="/signup" rel="external nofollow" , data-toggle="modal", data-target="#signupModal") 注册
    span  | 
    a.navbar-link(href="/login" rel="external nofollow" , data-toggle="modal", data-target="#signinModal") 登录
Copier après la connexion

signup.jade


include ../layout
 block content
  form.form-horizontal( role="form", method="POST", action='/user/signup')
   .form-group
    label.col-sm-2.control-label(for="signupName") 用户名
    .col-sm-10
     input#signupName.form-control(type="text", name="user[name]", placeholder="输入用户名")
   .form-group
    label.col-sm-2.control-label(for="signuppassword") 密码
    .col-sm-10
     input#signuppassword.form-control(type="password", name="user[password]", placeholder="输入密码")
   .form-group
    label.col-sm-2.control-label(for="signupemail") 邮箱
    .col-sm-10
     input#signupemail.form-control(type="email", name="user[email]", placeholder="输入邮箱")
   .form-group
    .col-sm-offset-2.col-sm-10
     button.btn.btn-default(type="submit") 完成注册
Copier après la connexion

Configurer le routage

Connectez-vous à la page d'inscription


// 注册页面
app.get('/signup', function (req,res) {
 res.render('signup', {
 title: '注册'
 });
});
// 登录页面
app.get('/login', function (req,res) {
 res.render('login', {
 title: '登录'
 });
});
Copier après la connexion

Fonction d'inscription


// 注册表单
app.post('/user/signup', function (req,res) {
 var _user = req.body.user;
 User.findOne({name:_user.name}, function (err, user) {
 if(err){
  console.log(err);
 }
 if(user) {
  return res.redirect('/login');
 } else {
  var user = new User(_user);
  user.save(function (err, user) {
  if(err){
   console.log(err);
   res.redirect('/signup');
  }
  console.log('注册成功——用户名:' + user);
  res.redirect('/login'); 
  });
 }
 });
});
Copier après la connexion

Fonction de connexion


// 登录表单
app.post('/user/login', function (req,res) {
 var _user = req.body.user;
 var name = _user.name;
 var password = _user.password;
 User.findOne({name:name}, function (err, user) {
 if(err){
  console.log(err);
 }
 if(!user) {
  return res.redirect('/signup');
 }
 user.comparePassword(password, function (err, isMatch) {
  if (err){
  console.log(err);
  }
  if (isMatch) {
  req.session.user = user; // 用户名存入session中
  console.log('登录成功——用户名: ' + user);
  return res.redirect('/');
  } else {
  return res.redirect('/lgoin');
  }
 });
 });
});
Copier après la connexion

Déconnexion


app.get('/layout', function(req,res){
 delete req.session.user;
 //delete app.locals.user; // 删除全局变量user,否则点击退出登录,页面无变化
 res.redirect('/');
});
Copier après la connexion

Connectez-vous à l'opération de base de données enregistrée

Connectez-vous à la base de données


mongoose.connect("mongodb://localhost/express"); // 连接数据库
Copier après la connexion

Définition du schéma

Mise à jour et recherche des données, et salage des mots de passe


//schemas/user.js
var mongoose = require('mongoose');
var bcrypt = require('bcrypt');
var SALT_WORK_FSCTOR = 10; // 计算强度,越大破解越困难
var UserSchema = new mongoose.Schema({
 name: {
 unique: true,
 type:String
 },
 password: String,
 email:String,
 meta: {
 createAt: {
  type: Date,
  default: Date.now()
 },
 updateAt: {
  type: Date,
  default: Date.now()
 }
 }
});
//每次存入数据时都进行判断
UserSchema.pre('save', function (next) {
 var user = this;
 if (this.isNew) { // 数据是新数据
 this.meta.createAt = this.meta.updateAt = Date.now();
 } else {
 this.meta.updateAt = Date.now();
 }
 //密码 加盐
 bcrypt.genSalt(SALT_WORK_FSCTOR, function (err, salt) {
 if (err) {
  return next(err);
 }
 bcrypt.hash(user.password, salt, function (err, hash) {
  if (err) {
  return next(err);
  }
  user.password = hash;
  next();
 });
 });
});
UserSchema.methods = {
 comparePassword: function (_password, cb) {
 bcrypt.compare(_password, this.password, function (err, isMatch) {
  if (err) {
  return cb(err);
  }
  cb(null, isMatch);
 })
 }
};
UserSchema.statics = {
 fetch: function (cb) {
 return this
  .find({})
  .sort('meta.updateAt')
  .exec(cb);
 },
 findById: function (id, cb) {
 return this
  .findOne({_id: id})
  .exec(cb)
 }
};
Copier après la connexion


module.exports = UserSchema;
Copier après la connexion

modèle compilé modèle


// models/user.js
var mongoose = require('mongoose');
//模式
var UserSchema = require('../schemas/user');
//编译模型
var User = mongoose.model('user',UserSchema);
module.exports = User;
Copier après la connexion

Injection de fichier d'entrée


//app.js
var User = require('./models/user');
app.set('view engine', 'jade'); // jade模板引擎
app.set("views", "./views/pages/"); // 视图根目录
var serveStatic = require('serve-static'); // 静态文件处理
app.use(serveStatic('public')); // 路径:public
Copier après la connexion

Middleware d'authentification

Obtenir le nom d'utilisateur de la session, le stocker en local et l'exposer à la vue, cela c'est-à-dire qu'il peut être obtenu de header.jade à l'utilisateur.


app.use(function (req, res, next) {
 var _user = req.session.user;
 app.locals.user = _user;
 return next();
});
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que faire si Navicat expire Que faire si Navicat expire Apr 23, 2024 pm 12:12 PM

Les solutions pour résoudre les problèmes d'expiration de Navicat incluent : renouveler la licence ; désinstaller et réinstaller ; désactiver les mises à jour automatiques ; utiliser la version gratuite de Navicat Premium ; contacter le support client de Navicat.

Comment connecter Navicat à MongoDB Comment connecter Navicat à MongoDB Apr 24, 2024 am 11:27 AM

Pour vous connecter à MongoDB à l'aide de Navicat, vous devez : Installer Navicat Créer une connexion MongoDB : a. Entrez le nom de connexion, l'adresse de l'hôte et le port b. Entrez les informations d'authentification (si nécessaire) Ajoutez un certificat SSL (si nécessaire) Vérifiez la connexion. Enregistrez la connexion

Comparaison de Golang et Node.js dans le développement back-end Comparaison de Golang et Node.js dans le développement back-end Jun 03, 2024 pm 02:31 PM

Go et Node.js présentent des différences en termes de typage (fort/faible), de concurrence (goroutine/boucle d'événement) et de garbage collection (automatique/manuel). Go a un débit élevé et une faible latence, et convient aux backends à charge élevée ; Node.js est bon pour les E/S asynchrones et convient à une concurrence élevée et à des requêtes courtes. Les cas pratiques des deux incluent Kubernetes (Go), la connexion à une base de données (Node.js) et les applications Web (Go/Node.js). Le choix final dépend des besoins de l'application, des compétences de l'équipe et des préférences personnelles.

A quoi sert net4.0 A quoi sert net4.0 May 10, 2024 am 01:09 AM

.NET 4.0 est utilisé pour créer une variété d'applications et offre aux développeurs d'applications des fonctionnalités riches, notamment : programmation orientée objet, flexibilité, architecture puissante, intégration du cloud computing, optimisation des performances, bibliothèques étendues, sécurité, évolutivité, accès aux données et mobile. soutien au développement.

Quelle base de données est bonne pour nodejs ? Quelle base de données est bonne pour nodejs ? Apr 21, 2024 am 05:06 AM

Pour les applications Node.js, le choix d'une base de données dépend des exigences de l'application. Les bases de données NoSQL MongoDB offrent de la flexibilité, Redis offre une simultanéité élevée, Cassandra gère les données de séries chronologiques et Elasticsearch est dédié à la recherche. La base de données SQL MySQL offre d'excellentes performances, PostgreSQL est riche en fonctionnalités, SQLite est léger et Oracle Database est complet. Lors du choix, tenez compte des types de données, des requêtes, des performances, du caractère transactionnel, de la disponibilité, des licences et du coût.

Comment connecter nodejs à la base de données Comment connecter nodejs à la base de données Apr 21, 2024 am 05:07 AM

Étapes pour se connecter à une base de données dans Node.js : Installez le package MySQL, MongoDB ou PostgreSQL. Créez un objet de connexion à la base de données. Ouvrez une connexion à une base de données et gérez les erreurs de connexion.

Comment nodejs implémente la base de données Comment nodejs implémente la base de données Apr 21, 2024 am 05:42 AM

Se connecter à une base de données dans Node.js nécessite de choisir un système de base de données (relationnelle ou non relationnelle) puis d'établir une connexion à l'aide de modules spécifiques à ce type. Les modules courants incluent mysql (MySQL), pg (PostgreSQL), mongodb (MongoDB) et redis (Redis). Une fois la connexion établie, vous pouvez utiliser des instructions de requête pour récupérer des données et des instructions de mise à jour pour modifier les données. Enfin, la connexion doit être fermée lorsque toutes les opérations sont terminées pour libérer les ressources. Améliorez les performances et la sécurité en suivant ces bonnes pratiques, telles que l'utilisation du regroupement de connexions, les requêtes paramétrées et la gestion gracieuse des erreurs.

Intégration de fonctions et bases de données Java dans une architecture sans serveur Intégration de fonctions et bases de données Java dans une architecture sans serveur Apr 28, 2024 am 08:57 AM

Dans une architecture sans serveur, les fonctions Java peuvent être intégrées à la base de données pour accéder et manipuler les données de la base de données. Les étapes clés comprennent : la création de fonctions Java, la configuration des variables d'environnement, le déploiement de fonctions et le test des fonctions. En suivant ces étapes, les développeurs peuvent créer des applications complexes qui accèdent de manière transparente aux données stockées dans les bases de données.

See all articles