web-dev-qa-db-fra.com

Comment enregistrer un utilisateur avec Node.js et MongoDB (en utilisant mongoose et Express.js)

J'ai besoin de ton aide. Je veux créer un formulaire d’inscription d’utilisateur et utiliser Nodejs, Express.js, MongoDB (mangouste) et me donner un exemple très simple. donnez des valeurs comme celle-ci Nom: req.body.name mais cela ne fonctionnera pas:/À mon avis, j'ai fait quelque chose de mal.

c'est mon code et si vous pensez que ce n'est pas correct, corrigez-le. (Désolé pour mon mauvais anglais). c'est server.js

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/addressbookdb');
var express = require('express');
var app = express();
var db = mongoose.connection;

app.use(express.static(__dirname + '/../client'));

app.post("/",function(req,res){
    res.end("Registration Succesfully Completed!");

    var db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function (callback) {
        console.log("connected.")
    });

    // Schema
    var RegSchema = mongoose.Schema({
        Name: String,
        Email: String,
        Pass: String,
        Num: Number,
        reg_time : {
            type : Date, default: Date.now
        }
    }, { collection: 'AddressCol' });

    // Model
    var UserReg = mongoose.model('UserReg', RegSchema);

    // Add in collection
    var UserAdd = new UserReg({
        Name: req.body.name,
        Email: req.body.email,
        Pass: req.body.pass,
        Num: req.body.num,
    });

    // Save
    UserAdd.save(function (err, fluffy) {
        if (err) return console.error(err);
    });
});

app.listen(8000, function() {
  console.log("Server is running!");
});

et voici ma page HTML: 

<div class="form-group">
    <input type="text" class="form-control" id="name" placeholder="name><br>
    <input type="email" class="form-control" id="email" placeholder="Email"><br>
    <input type="password" class="form-control" id="pass" placeholder="Password"><br>
    <input type="number" class="form-control" id="num" placeholder="Number"><br>
    <button type="submit" class="btn btn-primary" id="reg-form-btn">Registration!</button>
</div>
<script>
    $(document).ready(function() {
        $("#reg-form-btn").click(function() {
            var name = $("#name").val();
            var email = $("#email").val();
            var pass = $("#pass").val();
            var num = $("#num").val();
            $.post("/", {
                Name: name,
                Email: email,
                Pass: pass,
                Num: num
            });
        });
    });
</script>
4
Vatex Official

Peut-être devriez-vous envisager Passport ou un autre module. Mais vous pouvez faire quelque chose comme ceci:

app.post('/signup', function (req, res, next) {
    var user = {
       Name: req.body.name,
       Email: req.body.email,
       Pass: req.body.pass,
       Num: req.body.num
   };
   var UserReg = mongoose.model('UserReg', RegSchema);
   UserReg.create(user, function(err, newUser) {
      if(err) return next(err);
      req.session.user = email;
      return res.send('Logged In!');
   });
});

app.post('/login', function (req, res, next) {
   var email = req.body.email;
   var pass = req.body.pass;

   User.findOne({Email: email, Pass: pass}, function(err, user) {
      if(err) return next(err);
      if(!user) return res.send('Not logged in!');

      req.session.user = email;
      return res.send('Logged In!);
   });
});

app.get('/logout', function (req, res) {
   req.session.user = null;
});

Ensuite, vous devriez avoir un middleware pour gérer l'authentification

function isLoggedIn (req, res, next) {
  if (!(req.session && req.session.user)) {
    return res.send('Not logged in!');
  }
  next();
}

Et l'utiliser sur les routes privées

app.get("/api", isLoggedIn, function (req, res) {
   //Something private
})
9
Rafael P. Miranda

vérifiez ce tutoriel ... vous pouvez ignorer Angular et mongojs si vous voulez: http://www.phloxblog.in/single-page-application-angular-js-node -js-mongodb-mongojs-module/#. Vc20OXW1Gkq

0
Subham

Il vous manque body-parser. Essayez ceci dans votre code serveur:

const bodyParser = require('body-parser');
app.use(bodyParser);

Veuillez vous référer à la question Comment accéder au corps de la demande lors de l'envoi de messages à l'aide de Node.js et Express?

0
Han

Voici un joli tutorial comment faire ce que vous voulez en utilisant un module très utile passport . De plus, vous aurez un rapide aperçu du moteur de template Jade qui peut vous être utile pour apprendre davantage à créer express apps.

0
Alexander Korzhykov