[英]Importing data into a Mongodb schema
我是 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)
我遇到的大多數示例/實踐問題都需要用戶在 ONE 頁面上完成數據輸入。 但我在想是否有辦法使用一頁填充 3 個鍵,並使用另一頁填充另外 1 個鍵。
我的初步設計是讓用戶在注冊頁面填寫他們的姓名和電子郵件並將它們保存到數據庫中,完成后用戶將被引導到投票頁面點擊投票按鈕並將該輸入保存到數據庫中. 總共 4 個條目保存在一個 Schema 中。
我已經構建了注冊頁面。
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
我應該如何將那些填充的密鑰傳遞到投票頁面?
看看下面的例子。 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 代碼
app.post('/login', passport.authenticate('login', {
successRedirect : '/home',
failureRedirect : '/login',
failureFlash : true
}));
app.get('/home', function(request, response) {
response.render('pages/home');
});
用於顯示來自貓鼬的數據。 試試下面的方法。
<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
});
})
經過一番苦戰,我終於想出了一個可以解決我最初提出的問題的解決方案。 所以我所做的是在一個 routes.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
但是正如您在此處看到的,創建了兩個 Schema 。 這樣做的理由是第一頁用戶輸入存儲在第一架構中。 對於第二個模式中的前 3 個鍵,它們只是填充了來自第一個模式的重復信息; 第二個模式中的第四個鍵用於從第二頁獲取的用戶輸入。 我知道這有點羅嗦。 :(
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.