javascript - 无法使用 Express 和 Mongoose 存储新用户

标签 javascript node.js express

我正在尝试使用express 创建用户。 我正在通过 Postman 通过以下 URL 对参数 URL 处的所有新用户数据执行 POST 请求:

localhost:3000/users/register?first_name=1&last_name=1&email=1&password=123456&country=1&city=1&street=1&number=1

我在控制台上收到此错误:

There was an erorrError: Illegal arguments: undefined, string

在我创建的model文件夹中student.js,它是一个用户。

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const bcrypt = require('bcryptjs');


const StudentSchema = new Schema({
    first_name: String,
    last_name: String,
    email:{
        type: String,
        required: true,
        unique: true
    },
    password: {
        type: String,
        required: true
    },
    address:
        {   country: String,
            city: String,
            street: String,
            number: Number
        },
    created_at: Date,
    updated_at: Date
});
StudentSchema.pre('save', function(next) {
    var currentDate = new Date();
    this.updated_at = currentDate;
    if (!this.created_at)
        this.created_at = currentDate;

    next();
});
var Student = mongoose.model('Student', StudentSchema);
module.exports = Student;

module.exports.addStudent = function(newStudent, callback){
    bcrypt.genSalt(10, function(err, salt) {
        bcrypt.hash(newStudent.password, salt, function(err, hash) {
            if(err) {
                console.log(hash);
                **console.log("There was an erorr" + err);**
            }else {
                newStudent.password = hash;
                newStudent.save(callback);
            }
        });
    });
};

在用户路由器的路由文件夹中:

var express = require('express');
var router = express.Router();
var Student = require('../models/student');
var mongodb = require('mongodb');

router.post('/register', function(req, res, next) {
    var newStudent =new Student( {
        first_name: req.body.first_name,
        last_name: req.body.last_name,
        email: req.body.email,
        password: req.body.password,
        address:
            {
                country: req.body.country,
                city: req.body.city,
                street: req.body.street,
                number: req.body.number
            }
    });

    Student.addStudent(newStudent, function(err,user) {
    if(err){
        res.json({success: false, msg:'Failed to register user'});
    } else {
        res.json({success: true, msg:'User registered'});
    }
    });
});

router.get('/newstudent', function(req, res) {
    res.render('newstudent', { title: 'Add student' });
});

module.exports = router;

我用“**”标记了代码行刹车

最佳答案

您正在使用查询参数(显示在网址中)在 Postman 中发送数据,并期望在 req.body 中提取数据。

您可以更改其中之一(在 postman 发送请求正文中,或在快速提取查询参数中),但不建议在 URL 中发送用户名/密码等敏感数据,因为它是可见的且安全性较低。

因此,您应该更改 Postman 中将数据发送到正文的方式,如下所示:

enter image description here

关于javascript - 无法使用 Express 和 Mongoose 存储新用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44338841/

相关文章:

javascript - glmatrix.js 异常 - 更改转换顺序不会改变结果

javascript - CSS :hover with JS problem

javascript - 将本地 npm 库与 es6、babel 和 webpack 结合使用

node.js - Express-Validator v4 简约示例始终返回错误

angularjs - Passport.js、Express.js 和 Angular.js 路由 : how can they coexist?

javascript - 如何使用 $http.get 从服务器查看数据

javascript - 仅从指定表单 jquery 中选择文本字段

javascript - Node 上的 server.js 文件在哪里

AngularJS GULP BrowerSync 错误 : ENAMETOOLONG, 名称太长

json - 向express路由添加参数,检索相反的