我正在创建一个 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) 获取到服务器上的这些变量中。
如果没有,请在请求中设置它们。
关于javascript - ExpressJS - 不会将新用户发布到 MongoDB(500 内部服务器错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54830474/