Импорт данных в схему Mongodb - PullRequest
1 голос
/ 02 марта 2020

Я новичок в Node.js и Express. js. Я работаю с приложением для голосования, чтобы улучшить свои навыки. Ниже приведена схема данных, которую я создал.

const mongoose = require('mongoose');
const register = mongoose.Schema;

const Voter = new register({ 
    firstName:{
        type:String,
        required:true,
    },

    lastName:{
        type:String,
        require:true
    },

    email:{
        type:String,
        unique:true,
        required:true
    },

    vote:{
        type:Number
    }
})

module.exports = mongoose.model('Voter',Voter)

Большинство примеров / практических проблем, с которыми я столкнулся, требуют, чтобы пользователь завершил ввод данных на ОДНОЙ странице. Но я думаю, есть ли способ заполнить 3 клавиши, используя одну страницу, и один ключ, заполненный другой страницей.

Мой предварительный дизайн состоит в том, чтобы пользователь заполнил их. имена и адреса электронной почты на странице регистрации и сохраните их в базе данных; после этого пользователь будет перенаправлен на страницу голосования , чтобы нажать кнопку голосования и сохранить эти данные в база данных. Всего 4 записи сохраняются в одной схеме.

Я создал страницу регистрации.

const express=require('express');
const router=express.Router();
const Voter = require('../models/voter');

router.get('/',(req,res)=>{
    res.render('cand/profiles')
})

router.get('/loggedin',async (req,res)=>{
    res.render('cand/index')
})

router.post('/loggedin',async (req,res)=>{
    const register = new Voter({
        firstName:req.body.first_Name,
        lastName:req.body.last_Name,
        email:req.body.email,
    })

    if (req.body.first_Name!==''||req.body.last_Name!==''||req.body.email!==''){
        var newVoter = await register.save()
        //res.send('Hello')
        res.render('cand/index',{
            voterFirstName:newVoter.firstName,
            voterLastName:newVoter.lastName,
            voterEmail:newVoter.email
        })
        console.log(newVoter)

    }else{
        res.redirect('/')
    }

})

module.exports=router

Как мне доставить эти заполненные ключи на страницу голосования ?

Ответы [ 2 ]

1 голос
/ 03 марта 2020

После тяжелого боя я наконец-то нашел решение, которое может решить проблему, которую я изначально поставил. Так что я сделал, чтобы имел страницы для пользовательских входов, созданных по одному файлу маршрутов. js. И отображать эти страницы отдельно с помощью нескольких методов HTTP-запроса. Таким образом, страницы, отображаемые по другому пути, смогут позволить пользователю вводить различную информацию.

const express=require('express');
const router=express.Router();
const Voter = require('../models/voter');
const Ballot = require('../models/ballot')

//ignore the registration for now
var newVoter=''

router.get('/',(req,res)=>{
    res.render('cand/profiles')
})

router.get('/loggedin',async (req,res)=>{
    res.render('cand/index')
})

router.post('/loggedin',async (req,res)=>{
    const register = new Voter({
        firstName:req.body.first_Name,
        lastName:req.body.last_Name,
        email:req.body.email,
    })

    if (req.body.first_Name!==''||req.body.last_Name!==''||req.body.email!==''){
        newVoter = await register.save()

        res.render('cand/index',{
            voterFirstName:newVoter.firstName,
            voterLastName:newVoter.lastName,
            voterEmail:newVoter.email
        })

    }else{
        res.redirect('/')
    }

})
router.get('/loggedin/testing',(req,res)=>{
    res.send(newBallot)
})

//testing
router.post('/loggedin/testing',async (req,res)=>{
    //res.send(newVoter)
    const ballot_info = new Ballot({
        ballotFirstName:newVoter.firstName,
        ballotLastName:newVoter.lastName,
        voteCasted:req.body.ballot
    })

    newBallot = await ballot_info.save()
    res.send(newBallot)
})

module.exports=router

Но, как вы можете видеть здесь, ДВА схемы созданы . Обоснованием этого является то, что пользовательские входы на 1-й странице хранятся в 1-й схеме. Для первых 3 ключей во 2-й схеме они были просто заполнены дублированной информацией из 1-й схемы; 4-й ключ во 2-й схеме предназначен для пользовательского ввода, полученного со 2-й страницы. Это немного многословно, я знаю. :(

1 голос
/ 02 марта 2020

Проверьте пример ниже. action = "/ login" будет перенаправлять на путь входа в систему.

<div class="form">
<form action="/login" method = "post">
  <input type="text" placeholder="E-Mail" name="email" required/>
  <input type="password" placeholder="Password" name="password" required/>
  <button>Login</button>
</form>

Код js, который будет использоваться для перенаправления на указанный c route

app.post('/login', passport.authenticate('login', {
    successRedirect : '/home', 
    failureRedirect : '/login', 
    failureFlash : true
}));

app.get('/home', function(request, response) {
        response.render('pages/home');
});

Для отображения данных с понедельника goose. Попробуйте следующим образом.

<div id = "profile">
<h3>My Profile Info:</h3>
    <form>
        <fieldset>
            <input type = "text" value = "<%= user.user.username %>" />
       </fieldset>
    </form>

Здесь имя пользователя выбирается из mongodb и отправляется на html следующим образом:

app.get('/profile', auth, function(request, response) {
    response.render('pages/profile', {
        user : request.user
    });
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...