Используя mongoDB, как я могу запретить кому-либо использовать то же имя пользователя, что и у кого-то еще? - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть форма, в которой пользователь должен ввести свой псевдоним, проблема в том, что мне нужно, чтобы этот псевдоним был уникальным, потому что никто другой не мог сделать такой псевдоним, как кто-либо другой. Есть ли исправить это, используя только mongoDB, а не mon goose?

var bodyParser = require("body-parser");
var express = require("express");
var app = express();

var PORT = 3332;

app.use("/", express.static(__dirname));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

mongoose.connect("mongodb://localhost/gtra", {
  useNewUrlParser: true
});

var db = mongoose.connection;
db.once("open", function(cb) {
  console.log("connection established");
});

app.post("/addname", (req, res) => {
  var name = req.body.pickname;
  var data = {
    nickname: name
  };
  db.collection("dat").insertOne(data, function(err, coll) {
    if (err) throw err;
    console.log("rec estab");
    res.redirect("/");
  });
});

app.listen(PORT, function() {
  console.log("server is up and running using port " + PORT);
});

1 Ответ

2 голосов
/ 03 апреля 2020

Вы можете проверить, есть ли уже имя пользователя в коллекции, если существует, вы можете выдать исключение.

app.post("/addname", (req, res) => {
  var data = {
    nickname: req.body.pickname
  };

  db.collection("dat").findOne({ nickname: data.nickname }, function(err, doc) {
    if (err) throw err;

    if (doc) {
      return res.status(400).send("Nickname already taken"); //or throw whatever you want
    } else {
      db.collection("dat").insertOne(data, function(err, coll) {
        if (err) throw err;
        console.log("rec estab");
        res.redirect("/");
      });
    }
  });
});

Другой вариант - создать уникальный индекс в поле псевдонима.

db.users.createIndex( { "nickname": 1 }, { unique: true } )

Измените пользователей на имя вашей коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...