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>
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
})
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
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?
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.