繁体   English   中英

传递给用户模型时未定义Express req.body

[英]Express req.body undefined when passing to user model

使用Express 4.14,我有一个简单的HTML表单,可以接受用户名和密码。 我想将该信息传递给将其插入到我的psql数据库中的函数。 但是首先我验证该用户是否已经在数据库中。 我在“ let uname = req.body.name;”处不断收到错误消息。

谢谢您的帮助。

HMTL形式:

<div>
<form class="" action="/register" method="post">
  <input class="text-input" type="text" name="user[username]" value="" placeholder="Username">
  <input class="text-input" type="password" name="user[password]" value="" placeholder="Password">
  <input type="submit" value="Sign up">
</form>
</div>

我的功能插入数据库:

verifyUser(req, res, next) {
let uname = req.body.name;
db.any(`SELECT * FROM users WHERE name = uname LIMIT 1`)
.then(() => {
next();
})

我的服务器设置:

'use strict'
require('dotenv').config({ silent: true });
const bodyParser      = require('body-parser');
const express         = require('express');
const logger          = require('morgan');
const path            = require('path');
const app             = express();
const authRouter      = require('./routes/auth/auth.js');
const loginRouter     = require('./routes/login/login.js');
const apiRouter       = require('./routes/api/apiRoute.js');
const profileRouter   = require('./routes/profile/profile.js');
const regRouter       = require('./routes/register/register.js');

const PORT            = process.argv[2] || process.env.port || 3000;

app.use(logger('dev'));

app.use(express.static(path.join(__dirname, 'dist')));
app.use(express.static(path.join(__dirname, 'public')));

app.use(bodyParser.urlencoded({ extended: true }));

app.use(bodyParser.json());
app.listen(PORT, () => { console.log('app is listening on 3k')});

app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'public/landing.html'));
});

app.get('/login', (req, res) => {
res.sendFile(path.join(__dirname, 'public/login.html'));
});

app.get('/signup', (req, res) => {
res.sendFile(path.join(__dirname, 'public/signup.html'));
});

app.use('/api', apiRouter);
app.use('/auth', authRouter);
app.use('/login', loginRouter);
app.use('/register', regRouter);
app.use('/profile', profileRouter);

regRouter:这些console.logs均未返回任何内容。 就是这样。

const regRouter = require('express').Router();
const { createUser }  = require('../../models/user_model');

regRouter.get('/', (req, res) => {
  console.log('register line 5')
  res.render('register');
});

regRouter.post('/', createUser, (req, res) => {
console.log('register line 10')
res.render('landing');
});

module.exports = regRouter;

创建用户:

function createUser(req, res, next) {
console.log('create user line 10');
 let uname = req.body.name;
 console.log('body', req.body);
let encryption = bcrypt.hashSync(req.body.password, SECRET);
  db.any(`INSERT INTO users
  (name, password)
  VALUES ($1, $2);` [uname, encryption])
  .then(() => {
  next();
   })
  .catch(error => next(error));
 };

在您的html中,没有任何将name属性设置为“ name”或“ password”的输入字段。

<input class="text-input" type="text" name="name" value="" placeholder="Username">
<input class="text-input" type="password" name="password" value="" placeholder="Password">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM