javascript - ExpressJS - 不会将新用户发布到 MongoDB(500 内部服务器错误)

标签 javascript node.js mongodb express mongoose

我正在创建一个 MEAN Stack 应用程序并尝试创建一个新用户以添加到我的 MongoDB。在 Postman 上测试此功能时,我不断收到 500 内部服务器错误。在 user-contoller.js 中创建 newUser 后,我 console.log 但显示的只是 {_id: 5c700e93cb5c320d18bc285}。

app.js

//

Dependency or module imports
    const path = require('path');
    const express = require('express');
    const bodyParser = require('body-parser');
    const mongoose = require('mongoose');
    const cors = require('cors');
    const helmet = require('helmet');
    const passport = require('passport');

    //Used to use enviroment variables to connect to DB
    require('dotenv').config();
    const dbconfig = require('./config/database');

    //Use this for now - have to change for development and production testing
    var url ="mongodb://localhost:27017/DB-Dev" || 3000;

    //Connecting to MongoDB - locally, development, testing, and production -- Changing dbconfig files
    mongoose.Promise = global.Promise;
    mongoose.connect(url, { 
      useCreateIndex: true,
      useNewUrlParser: true 
    });

    // On database connection
    mongoose.connection.on('connected', () => {
      
      console.log('Connected to database');
      
    });

    // If database connection errors
    mongoose.connection.on('error', (err) => {
      console.log('Database error: ' + err);
      //winston.error('Failed to connect to database)
    })

    //Create express application
    const app = express();


    //Use helmet to set some http security headers
    app.use(helmet());

    // Imports for routing classes
    const userRoutes = require('./routes/user-routes');

    //Port for server to listen on - may change in the future
    const port = 3000;

    //CORS default allows request from anywhere - set origins or routes
    app.use(cors());

    //set static folder for client side files
    app.use(express.static(path.join(__dirname, '../public')));

    //Body parser middleware
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(bodyParser.json());


     app.use((req, res, next) => {
       res.setHeader("Access-Control-Allow-Origin", "*");
       res.setHeader(
         "Access-Control-Allow-Headers",
         "Origin, X-Requested-With, Content-Type, Accept, Authorization"
       );
       res.setHeader(
         "Access-Control-Allow-Methods",
         "GET, POST, PATCH, PUT, DELETE, OPTIONS"
       );
       next();
    });

    //Passport middleware
    // app.use(passport.initialize());
    // app.use(passport.session());
    // //Import passport config file
    // require('./config/passport')(passport);

    //Default all routes to the homepage
     app.get('*',(req,res) => {
       res.render(path.join(__dirname, '../angular-src/src/index.html'));
    });

    //Route handling done here
    app.use('/users',helmet.noCache(), userRoutes);


    //If there is an error, returns a 500 error
    app.use((err, req, res, next) => {
      if(err) {
        return res.sendStatus(500);
      }
      next();
    });



    //Start Server
    app.listen(port, () => {
      console.log("Server started on: " + port);
    }).setTimeout = 300000; //Timeout after 5 minutes

用户模型.js

// Import modules and configuration files
const mongoose = require('mongoose');
const uniqueValidator = require('mongoose-unique-validator');


// User schema
const userSchema = mongoose.Schema({
    firstName: {
        type: String, 
        required: true,
    },
    lastName: {
        type: String,
        required: true,
    },
    email: {
        type: String,
        required: true,
        unique: true
    },
    password: {
        type:String,
        required: true,
    },
});

//Using this will check for duplicate database entries 
userSchema.plugin(uniqueValidator);

module.exports = mongoose.model("User", userSchema);

用户 Controller .js

//Import dependencies here needed to complete middleware implementation
const crypto = require('crypto');
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const validationResult = require("express-validator");

const User = require('../models/user-model');


exports.createUser = (req, res, next) => {
    bcrypt.hash(req.body.password, 10).then(hash => {
      const newUser = new User({
        firstName: req.body.firstName,
        lastname: req.body.lastname,
        email: req.body.email,
        password: hash
      });

      newUser.save().then(result => {
        res.status(201).json({
          message: "User has been created",
          result: result
        });
      })
      .catch(err => {
        res.status(500).json({
          message: "Invalid authentication credentials"
        });
      });
    });
} // End of createUser middleware 

user-routes.js

// Import dependencies 
const express = require('express');
const { check } = require('express-validator/check');


// Imported controller files
const UserController = require('../controller/user-controller');

// Create a new instance of Router
const router = express.Router();

// TO - DO 
//register route follows /users/register
//middle checks array is from express-validator library. checks strings to see if they meet requirements also sanitizes html with the .escape()
router.post("/register", 
   UserController.createUser
);

//TO-DO: Authenticate 

//TO-DO: Resend Verification Email

//TO-DO: Verify Account

//TO-Do: Get User Profile

module.exports = router;

最佳答案

首先,我会在 user-controller.js 中放置一些 console.log 语句。

由于名字、姓氏、电子邮件和密码是用户模型的必需属性,因此在尝试创建和保存新用户记录之前,我会 console.log 它们。

console.log(`***firstName: ${req.body.firstName}`)
console.log(`***lastName: ${req.body.lastName}`)
// ...

使用 Postman 触发 HTTP 请求以命中适当的路由,然后查看 Express 服务器日志以查看数据是否从客户端 (Postman) 获取到服务器上的这些变量中。

如果没有,请在请求中设置它们。

Postman: Requests - Form Data

关于javascript - ExpressJS - 不会将新用户发布到 MongoDB(500 内部服务器错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54830474/

相关文章:

javascript - 何时加载图像以使用Javascript函数drawImage()?

javascript - 在项目的子文件夹中为 eslint 使用不同的可共享配置

javascript - XHR 似乎不会在与 Ember 的转换时触发

node.js - 为什么构建目录隐藏在 Netbeans 8.2 Node.js 应用程序的项目 View 中

c++ - 遍历文件,只得到一行

javascript - 这些js和css文件如何从我的元素中排除?

javascript - 如何将 Js 函数数组传递给另一个 Js 函数?

mongodb - 返回所有字段 MongoDB 聚合

mongodb - 尝试连接到MongoDB的Docker实例时出现MongoServerSelectionError

mongodb - IntelliJ 中的 Mongo 资源管理器不显示集合