【问题标题】:RangeError: Maximum call stack size exceeded (MongoDB-mongoose)RangeError:超出最大调用堆栈大小(MongoDB-mongoose)
【发布时间】:2020-04-14 12:39:10
【问题描述】:

尝试将用户详细信息保存到 MongoDB Atlas,我使用 Postman 作为 API 接口。 req.body 包含使用邮递员发送 (POST) 的 JSON 请求。 JSON 无法传递到后端,Postman 抛出以下错误:

RangeError - 超出最大调用堆栈大小

controllers/user.js

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

exports.signup = (req,res)=>{
    console.log("req.body",req.body);
    const user = new User(req.body);
    user.save((err,user)=>{
        if(err){
            return res.status(400).json({
                err
            });
        }
        res.json({
            user
        });
    });


};

routes/user.js

const express=require('express')
const router=express.Router()


const { signup } = require("../controllers/user");

router.post("/signup",signup) 


module.exports = router;

app.js


const express=require('express')
const mongoose=require('mongoose')
require('dotenv').config() //use env variables


const morgan = require('morgan')
const bodyParser = require('body-parser')
const cookieParser = require('cookie-parser')



//import routes
const userRoutes=require('./routes/user');
//app
const app=express()

//db

mongoose.Promise = global.Promise;
mongoose.connect(process.env.MONGO_URI,{
    useNewUrlParser:true,
    useCreateIndex: true,
    useUnifiedTopology: true
}).then(()=>{
    console.log('DB Connected');
}).catch(err=>console.log(err));

mongoose.connection.on('error',err=>{
    console.log(`DB connection error :${err}`)
})

//routes

app.use(morgan('dev'))
app.use(bodyParser.json())
app.use(cookieParser())

//routes middleware
app.use("/api",userRoutes);
const port=process.env.PORT || 8000;




app.listen(port,()=>{
    console.log(`Server is running on ${port}`);
});

【问题讨论】:

    标签: javascript node.js mongodb mongoose postman


    【解决方案1】:

    在您的项目中转到模型文件夹,然后在 user.js 中输入:

    userSchema.virtual("password")
      .set(function(password){
        this._password=password;
        this.salt=uuidv4()
        this.encry_password=this.securePassword(password)
      })
      .get(function(){
        return this._password;
      });
    

    【讨论】:

    • 你能详细说明这解决了什么问题吗?
    【解决方案2】:

    如果您的用户对象具有循环引用,则 res.json 可能会失败。您可以在通过 amd 选择的属性发送响应之前对响应进行字符串化。像

    res.send(JSON.stringify(user, ['firstname', 'lastname', 'age']))
    
    

    【讨论】:

      猜你喜欢
      • 2012-05-27
      • 1970-01-01
      • 2014-08-19
      • 2013-08-18
      • 2018-07-29
      • 2018-02-06
      • 1970-01-01
      相关资源
      最近更新 更多