NodeJS:为什么在用户注册期间未定义电子邮件?

时间:2019-05-07 15:27:30

标签: javascript node.js

我正在使用NodeJS开发具有用户注册和登录功能的API。当用户注册时,我得到

  

“错误:WHERE参数“电子邮件”具有无效的“未定义”值”此   错误。”

我在这里检查了类似的问答,并尝试了其中的每一个,但没有一个对我有用。

app.js文件

```
//use path module
const path = require('path');
//use express module
const express = require('express');
//use ejs view engine
const ejs = require('ejs');
//use bodyParser middleware
const bodyParser = require('body-parser');
//use mysql database
const mysql = require('mysql');
const app = express();

//Setting port number
const port = process.env.PORT || 619;

const mysqlConnection = mysql.createConnection({
    host: 'localhost',
    user:'root',
    password: '',
    database: 'home_automation_db'
});



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

app.use(function(req, res, next) {
  res.locals.stuff = {
      url   : req.originalUrl
  }
  next();
});


//connecting to database
mysqlConnection.connect((err) =>{
    if(!err)
    console.log('DB connection successful');
    else
    console.log('connection failed \n Error: '+JSON.stringify(err, undefined, 2));
});

var Users = require('./controllers/lightController');

app.use('/users', Users);

//server listening
app.listen(port, () => {
  console.log('Server is running at port '+port);
});

lightcontroller.js

```var bodyParser= require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false });
var generator = require('generate-password');
var nodemailer = require('nodemailer');
const bcrypt = require('bcrypt');
const cors= require('cors')
const jwt = require('jsonwebtoken');
const express =require('express')
const users = express.Router();

const User = require('../models/User');

users.use(cors());
process.env.SECRET_KEY = 'secret';
```

```
// Login controller
users.post('/register', function (req, res) {
    const userData = {
        user_name: req.body.username,
        email: req.body.email,
        password: req.body.password,
        location: req.body.location,
        house_number: req.body.house_number
    }
    User.findOne({
        where: {
            email: req.body.email
        }
    }).then(user => {
        if (!user) {
            bcrypt.hash(req.body.password, 10, (err, hash) => {
                userData.password = hash
                User.create(userData).then(user => {
                    res.json({ status: user.email + "registered" })
                }).catch(err => {
                    res.send('error: ' + err)
                })
            })
        } else {
            res.json({ error: "user already exist." })
        }
    }).catch(err => {
            res.send('error: '+err)
        })
});
```

用户模型

 const Sequelize = require('sequelize')
    const db = require("../database/db")

    module.exports = db.sequelize.define(
        'user_tb',
        {
            user_id: {
                type: Sequelize.INTEGER,
                primaryKey: true,
                autoIncrement: true
            },
            user_name: {
                type: Sequelize.STRING
            },
            email: {
                type: Sequelize.STRING
            },
            password: {
                type: Sequelize.STRING
            },
            location: {
                type: Sequelize.STRING
            },
            house_number: {
                type: Sequelize.STRING
            }  
        },
        {
            timestamps: false,
            freezeTableName: true
        }
    )

1 个答案:

答案 0 :(得分:0)

正如@messerbill所说,最可能的原因是以undefined的形式发送数据

尝试在将数据发布到客户端后的发布请求后添加配置,以便它设置适当的内容类型:

axios.post('http://localhost:9000/api/login', {
    email: this.state.email,
    password: this.state.password,
}, {
    'content-type': 'x-www-form-urlencoded'
}).then(res => {
    console.log(res);
    if(res.status) {
        console.log('User is logged in');
    }
}).catch(err => console.log(err))