Метод POST не вставляется в массив пользователей - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь выяснить, почему мой метод Post не будет вставлять пользователя, созданного в форме регистра, в мой пользовательский массив, и в узле не зарегистрирован ни один массив. При нажатии кнопки регистрации сайт также не перенаправляет на страницу / login. Я не ищу точное решение, может быть, просто совет, чтобы помочь мне на правильном пути. (все библиотеки обязательны)

Метод POST im с использованием

const express = require('express')
const app = express()
const bcrypt = require('bcrypt');
// helps finding specifik path
const path = require('path')
const port = 3000


// users array 
const users = [];

app.use(express.static('views'))

app.listen(port,()=>{
    console.log("App is listening on port 3000")
});

// VIGTIGT: tilader at vi kan hente data fra forms via "Name" tagget i formen!
app.use(express.urlencoded({ extended: false }))
// req router fra .auth/user_auth

// Routing: We are mapping to a special respond, and responds a HTML filer
app.get('/contact',(req,res)=>{
    res.sendFile(path.resolve(__dirname,'./html/contact.html'))
})
app.get('/login',(req,res)=>{
    res.sendFile(path.resolve(__dirname,'./html/login.html'))
})
app.get('/register',(req,res)=>{
    res.sendFile(path.resolve(__dirname,'./html/register.html'))
})
app.get('/home',(req,res)=>{
    res.sendFile(path.resolve(__dirname,'./html/home.html'))
})
app.get('/portfolio',(req,res)=>{
    res.sendFile(path.resolve(__dirname,'./html/portfolio.html'))
})
app.get('/adminpage', (req,res)=>{
    res.sendFile(path.resolve(__dirname,'./html/adminpage.html'))
})

// post metoder fra form



app.post('/register', async (req, res)=>{
    try{
const hashedPassword = await bcrypt.hash(req.body.password, 10)
users.push({
    id: Date.now().toString(),
    name: req.body.username,
    email: req.body.email,
    password: hashedPassword
})
res.redirect('/login')
    } catch{
res.redirect('/register')
    }
console.log(users)
})


form im using 
<form>
    <div class="container">
      <h1>Register</h1>
      <p>Please fill in this form to create an account.</p>
      <hr>
      <label for="username"><b>Username</b></label>
      <input type="text" placeholder="Enter username" name="username" required>

      <label for="email"><b>Email</b></label>
      <input type="text" placeholder="Enter Email" name="email" required>

      <label for="psw"><b>Password</b></label>
      <input type="password" placeholder="Enter Password" name="password" required>

      <hr>
      <p>By creating an account you agree to our <a href="#">Terms & Privacy</a>.</p>
      <button href="/login" type="submit" class="registerbtn">Register</button>
    </div>  
    <div class="container signin">
      <p>Already have an account? <a href="/login">Sign in</a>.</p>
    </div>
  </form>

1 Ответ

0 голосов
/ 17 апреля 2020

Во-первых, вам нужно указать method и action, чтобы определить, куда данные отправляются:

<form action="/register" method="POST"> </form>

Во-вторых, вы не анализируете входящие данные, когда они получены вашим сервером. Синтаксис req.body подразумевает, что данные получены как объект / JSON, но я не вижу в вашем коде ничего, что указывало бы на то, что вы это делаете.

Вы можете использовать один из нескольких пакеты, чтобы сделать это для вас, и Express имеет встроенное промежуточное программное обеспечение для этой цели. Я бы порекомендовал пакет body-parser.

const bodyParser = require('body-parser'); app.use(express.json()) app.use(bodyParser.urlencoded({ extended: true }))

Стоит добавить временный console.log(req.body) к вашей функции, просто чтобы проверить, что данные формы принимаются по назначению.

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