Как получить доступ к данным сбора MongoDB из узла

#node.js #mongodb #qr-code

Вопрос:

Я пытаюсь создать приложение, которое в основном будет отображать QR-код человека, зарегистрированного в нашей базе данных, после того, как он/она войдет в свою учетную запись. Я могу преобразовать одно поле в QR-код, но я хочу преобразовать все элементы данных этого конкретного пользователя. Нужна помощь.

 mongoose.connect(DB, {
                        useNewUrlParser: true,
                        useUnifiedTopology: true,
                        useCreateIndex: true,
                        useFindAndModify: false
}).then(()=>{
    console.log("connected to mongoDb Atlas");
}).catch((error)=>
        console.log("no connection"));

//Schema
var userSchema = {
    email: String,
    password: String,
    name: String,
}
var User = mongoose.model("User", userSchema);
const { check, validationResult} = require("express-validator");
app.use("/styles",express.static("styles"));
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));
app.set("view engine","ejs");

//Navigation
app.get("/",function(req,res){
    res.render("index")
});
app.get("/login",function(req,res){
    res.render("login")
})
app.get("/register", function(req, res){
    res.render("register")
  })

app.post("/", function(req, res){
    bcrypt.hash(req.body.password, saltRounds, function(err, hash){
        let newUser = new User({ 
            email:req.body.email,
            password:hash, 
            name:req.body.name,
        });
    newUser.save();
    res.redirect("/");
    })
 
})

app.post("/login", function(req, res){
        const email = req.body.email;
        const password = req.body.password;
        const name = req.body.name;
        User.findOne({email:email}, function(err, foundUser){
                if (err){
                    res.send("Invalid login details");
                }else{
                        if (foundUser){
                        bcrypt.compare(password, foundUser.password, function(err, result){
                        if (result === true){
                           
                                
                            const url = req.body.email;
                            if (url.length === 0) res.send("Empty Data!");
                                qr.toDataURL(url,(err, src) => {
                                    if (err) res.send("Error occured");
                                    res.render("scan", { src });
                                });
                        }else{
                            res.send("Invalid login details! Try again.");
                         }
                        });
                        } 
                    }    
            }); 
})
app.listen(3000, function(){
    console.log("Server started at port 3000");
}) 
 

С помощью приведенного выше кода я могу получить QR-код только одного поля, т. е. либо req.body.email, либо req.body.name Но я хочу, чтобы QR-код обоих полей был зарегистрирован в моей базе данных MongoDB и вместе с уникальным идентификатором.

сканировать файл.ejs

 <%- include("./partials/header") %>
<body>
    <div class="container">
        <br>
        <h1 class="text-center">Scan Me!</h1>
        <hr>
        <div class="row mb-3">

        <div class="card" style="width: 18rem;">
            <img class="card-img-top" src=<%=src%> alt="QR Code Image">
            <div class="card-body">
            <p class="card-text">Scan the QR Code to access data!</p>
            </div>
            </div>
        </div>  
</body>
<%- include("./partials/footer") %>
 

Комментарии:

1. Пожалуйста, уточните, в чем вам нужна помощь. Вы. нужна помощь в запросе данных или вам нужна помощь в создании QR-кода?

2. @barrypicker Я могу сделать qr-код только одного элемента пользователя. Но мне нужен qr-код всех его данных, таких как адрес электронной почты,имя, номер телефона и т. Д.

3. доступны ли такие данные, как электронная почта, имя, телефон, в теле вашего запроса (т. е. в теле запроса)? Пожалуйста, включите модель данных, которую вы используете, чтобы можно было сделать предположения. Кроме того, было бы полезно, если бы вы включили достаточное количество кода, чтобы кто-то (например, я) мог просто запустить код для проверки идей, прежде чем давать рекомендации.

4. barrypicker Пожалуйста, взгляните на код еще раз.

Ответ №1:

Вот вам и ответ.

 const url = foundUser.toString();
    if (url.length === 0) res.send("Empty Data!");
       qr.toDataURL(url,(err, src) => {
       if (err) res.send("Error occurred");
         res.render("scan", { src });
 });