Javascript 如何使用 Node.js 和 MongoDB 进行用户注册(使用 mongoose 和 Express.js)

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/31986127/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-23 07:28:05  来源:igfitidea点击:

How to make user registration with Node.js and MongoDB (using mongoose and Express.js)

javascriptnode.jsmongodbexpressmongoose

提问by Vatex Official

I need your help. I want to make User registration form and use Nodejs, Express.js, MongoDB(mongoose) and give me very simple example how to make user registration form with: Name, Email, Password and Mobile Number :) I've made mongoose schema and give values like that Name: req.body.name but it won't work :/ In my oppinion I made something bad.

我需要你的帮助。我想制作用户注册表并使用 Nodejs、Express.js、MongoDB(mongoose) 并给我一个非常简单的例子,如何制作用户注册表:姓名、电子邮件、密码和手机号码 :) 我已经制作了 mongoose 架构和给出这样的值 Name: req.body.name 但它不起作用:/在我看来,我做了一些坏事。

this is my code and if you think it's not correct, please correct it. (sorry for my bad english). this is server.js

这是我的代码,如果您认为它不正确,请更正。(对不起,我的英语不好)。这是 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!");
});

and this is my HTML 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>

回答by Rafael P. Miranda

Maybe you should consider Passport or another module. But you can do something like this:

也许您应该考虑 Passport 或其他模块。但是你可以做这样的事情:

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;
});

Then you should have a middleware to handle authentication

那么你应该有一个中间件来处理身份验证

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

And use it on the private routes

并在私人路线上使用它

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

回答by Alexander Korzhykov

Here is a nice tutorialhow to make what you want using very useful module passport. Also you will have a quick look at Jadetemplate engine which can be useful in your further learning of creating expressapps.

这是一个很好的教程,如何使用非常有用的模块护照制作您想要的东西。此外,您还将快速了解Jade模板引擎,这对您进一步学习创建快速应用程序很有用。

回答by Subham

check this tutorial...you can ignore Angular and mongojs if you want: http://www.phloxblog.in/single-page-application-angular-js-node-js-mongodb-mongojs-module/#.Vc20OXW1Gkq

检查本教程...如果需要,您可以忽略 Angular 和 mongojs:http://www.phloxblog.in/single-page-application-angular-js-node-js-mongodb-mongojs-module/#.Vc20OXW1Gkq

回答by Han

You are missing body-parser. Try this in your server code:

你不见了body-parser。在您的服务器代码中试试这个:

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

Please refer the question How to access the request body when POSTing using Node.js and Express?

请参阅问题如何在使用 Node.js 和 Express POST 时访问请求正文?