Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:无法读取属性';名称';未定义节点的定义_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript TypeError:无法读取属性';名称';未定义节点的定义

Javascript TypeError:无法读取属性';名称';未定义节点的定义,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我是NodeJS的新手,我正在尝试为一家汽车租赁公司制作一个后端API。我已经将“name”的类型定义为string,而且我也没有在请求中传递空字符串,那么为什么它会显示此错误?几天以来我一直在寻找解决方案,但在互联网上的任何地方都找不到答案。我在某个地方读到mongoose的旧版本有一个bug,所以我在更新它之后也尝试了,但是错误没有发生,并且还尝试了更新到最新的NodeJS版本 这是我的密码 index.js let express = require('express'); let a

我是NodeJS的新手,我正在尝试为一家汽车租赁公司制作一个后端API。我已经将“name”的类型定义为string,而且我也没有在请求中传递空字符串,那么为什么它会显示此错误?几天以来我一直在寻找解决方案,但在互联网上的任何地方都找不到答案。我在某个地方读到mongoose的旧版本有一个bug,所以我在更新它之后也尝试了,但是错误没有发生,并且还尝试了更新到最新的NodeJS版本

这是我的密码

index.js


let express = require('express');

let app = express();

let mongoose = require('mongoose');

var port = process.env.PORT || 8081

let bodyparser = require('body-parser');

const { urlencoded } = require('body-parser');

app.use(bodyparser.urlencoded(
    {
       extended: true 
    }))

app.use(bodyparser.json());

var apiRoutes = require('./routes');
app.use('/api', apiRoutes);


const dbPath = "mongodb://localhost/carrentalagencypractice"
const options = {useNewUrlParser:true, useUnifiedTopology:true}
const mongo = mongoose.connect(dbPath,options)

mongo.then(()=>{
    console.log('Connected to mongodb')
} ,error=> {console.log(error,'error')})


app.use('/', function(req, res){
    res.send('Welcome to Car Rental Agency')
});


app.listen(port, ()=>{
    console.log('Running on port '+port)
});

routes.js


let router = require('express').Router();

router.get('/', function(req, res){
   res.json({
       status: 'API works',
       message: 'Welcome to Car Rental Agency services'
   })
})


var carController = require('./carController')
var userController = require('./userController')

router.route('/car').get(carController.index).post(carController.add)
router.route('/user').get(userController.index).post(userController.add)

router.route('/car/car_id').get(carController.view).patch(carController.update).put(carController.update).delete(carController.delete)
router.route('/user/user_id').get(userController.index).patch(userController.update).put(userController.update).delete(userController.delete)

module.exports = router
carModel.js


var mongoose = require('mongoose')

var carSchema = new mongoose.Schema({

    name:{
        type: String,
        required: true
    },

    brand:{
        type: String,
        required: true
    },

    price:{
        type: String,
        required: true
    },

    capacity:{
        type: String,
        required:true
    }
});


var Car = module.exports = mongoose.model('car',carSchema);

module.exports.get = function(callback, limit){
    Car.find(callback).limit(limit);
}
userModel.js

var mongoose = require('mongoose')

var userSchema = new mongoose.Schema({

    name:{
        type: String,
        required: true
    },

    email:{
        type: String,
        required: true
    },

    phone:{
        type: String,
        required: true
    },

    address:{
        type: String,
        required: true
    }
})


var User = module.exports = mongoose.model('user', userSchema)

module.exports.get = function(callback, limit){
    User.find(callback).limit(limit);
}
userController.js

User = require("./userModel");


exports.index = function(req, res){
    User.get(function(err, user){
    if(err)
    res.send(err)

    res.json({
        status: "Got all user details successfully",
        message: user
    })
})
}

exports.add = function(req, res){
User.add(function(err, user){
    var user = new User()

    if(err)
    res.send(err)

    user.name = req.body.name ? req.body.name : user.name;
    user.email = req.body.email;
    user.address = req.body.address;
    user.phone = req.body.phone;

    res.json({
        status: "User details are successfully added",
        message: user
    })
})
}


exports.view = function(req, res){
    User.findByID(req.params.user_id, function(err, user){
        if(err)
        res.send(err)

        res.json({
            status: "Successfully retreived user details",
            message: user
        })
    })
}

exports.update = function(req, res){
    User.findById(req.params.user_id, function(err, user){
        if(err)
        res.send(err)

        user.name = req.body.name? req.body.name: user.name;
        user.email = req.body.email;
        user.address = req.body.address;
        user.phone = req.body.phone;

        user.save(function(req, res){
            if(err)
            res.send(err)
    
            res.json({
                status: "User details updated successfully",
                message: user
            })
        })
    }
    )
}


exports.delete = function(req, res){
    User.deleteOne(req.params.user_id, function(err, user){
        if(err)
        res.send(err)
        
        res.json({
            status: "success",
            message: "The user account has been deleted"
        })
    })
}
Car = require('./carModel');


exports.index = function(req, res){
                    
    Car.get(function(err, car){
        if(err)
        res.json({
            status: "error",
            message: err
        })

        res.json({
            status: "successfull",
            message: "Car details succesfully retreived",
            data: car
        })
    });
}


exports.add = function(req, res){
    var car = new Car();
    car.name = res.body.name ? req.body.name : car.name;
    car.brand = res.body.brand;
    car.price = res.body.price;
    car.capacity = res.body.capacity;


    car.save(function(err){
        if(err)
        res.json(err);
        console.log

        res.json({
            status: "successfull",
            message: "Successfully add new car details"
        })

    })

}


exports.view = function(req, res){
    Car.findById(req.params.car_id, function(err, car){
        if(err)
        res.send(err)

        res.json({
            status: "Car details",
            message: car
        })
    })

}


exports.update = function(req, res){
    Car.findById(req.params.car_id, function(err, car){
        if(err)
        res.send(err)

        car.name = req.body.name? req.body.name: car.name;
        car.price = req.body.price;
        car.brand = req.body.brand;
        car.capacity = req.body.capacity;

        car.save(function(err){

            if(err)
            res.send(err)

            res.json({
                status:"Car details updated successfully",
                message: car
            })

        })
    })
}


exports.delete = function(req, res){
    Car.deleteOne({
        _id: car_id
    }, function(err, contact){
        if(err)
        res.send(err)

        res.json({
            status: "success",
            message:"Car ad deleted"
        })
    }
    )
}
carController.js

User = require("./userModel");


exports.index = function(req, res){
    User.get(function(err, user){
    if(err)
    res.send(err)

    res.json({
        status: "Got all user details successfully",
        message: user
    })
})
}

exports.add = function(req, res){
User.add(function(err, user){
    var user = new User()

    if(err)
    res.send(err)

    user.name = req.body.name ? req.body.name : user.name;
    user.email = req.body.email;
    user.address = req.body.address;
    user.phone = req.body.phone;

    res.json({
        status: "User details are successfully added",
        message: user
    })
})
}


exports.view = function(req, res){
    User.findByID(req.params.user_id, function(err, user){
        if(err)
        res.send(err)

        res.json({
            status: "Successfully retreived user details",
            message: user
        })
    })
}

exports.update = function(req, res){
    User.findById(req.params.user_id, function(err, user){
        if(err)
        res.send(err)

        user.name = req.body.name? req.body.name: user.name;
        user.email = req.body.email;
        user.address = req.body.address;
        user.phone = req.body.phone;

        user.save(function(req, res){
            if(err)
            res.send(err)
    
            res.json({
                status: "User details updated successfully",
                message: user
            })
        })
    }
    )
}


exports.delete = function(req, res){
    User.deleteOne(req.params.user_id, function(err, user){
        if(err)
        res.send(err)
        
        res.json({
            status: "success",
            message: "The user account has been deleted"
        })
    })
}
Car = require('./carModel');


exports.index = function(req, res){
                    
    Car.get(function(err, car){
        if(err)
        res.json({
            status: "error",
            message: err
        })

        res.json({
            status: "successfull",
            message: "Car details succesfully retreived",
            data: car
        })
    });
}


exports.add = function(req, res){
    var car = new Car();
    car.name = res.body.name ? req.body.name : car.name;
    car.brand = res.body.brand;
    car.price = res.body.price;
    car.capacity = res.body.capacity;


    car.save(function(err){
        if(err)
        res.json(err);
        console.log

        res.json({
            status: "successfull",
            message: "Successfully add new car details"
        })

    })

}


exports.view = function(req, res){
    Car.findById(req.params.car_id, function(err, car){
        if(err)
        res.send(err)

        res.json({
            status: "Car details",
            message: car
        })
    })

}


exports.update = function(req, res){
    Car.findById(req.params.car_id, function(err, car){
        if(err)
        res.send(err)

        car.name = req.body.name? req.body.name: car.name;
        car.price = req.body.price;
        car.brand = req.body.brand;
        car.capacity = req.body.capacity;

        car.save(function(err){

            if(err)
            res.send(err)

            res.json({
                status:"Car details updated successfully",
                message: car
            })

        })
    })
}


exports.delete = function(req, res){
    Car.deleteOne({
        _id: car_id
    }, function(err, contact){
        if(err)
        res.send(err)

        res.json({
            status: "success",
            message:"Car ad deleted"
        })
    }
    )
}

它抛出以下错误:

TypeError: Cannot read property 'name' of undefined
    at exports.add (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\carController.js:26:25)
    at Layer.handle [as handle_request] (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\route.js:137:13)
    at next (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\route.js:131:14)
    at Route.dispatch (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\layer.js:95:5)
    at C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\index.js:275:10)
    at Function.handle (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\index.js:174:3)
    at router (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\index.js:47:12)
    at Layer.handle [as handle_request] (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\index.js:317:13)
    at C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\index.js:284:7
    at Function.process_params (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Work\NodeJS Practice\Car Rental Agency (Practice)\node_modules\express\lib\router\index.js:275:10)

在carController.js中

exports.add=函数(req,res){
var car=新车();
car.name=req.body.name?req.body.name:car.name;
car.brand=req.body.brand;
car.price=所需车身价格;

car.capacity=req.body.capacity;
在carController.js中应该是

第26行 你的代码

car.name = res.body.name ? req.body.name : car.name;
正确代码

car.name = req.body.name ? req.body.name : car.name;

在最后四行中,我已将res替换为req,我已在答案中解释,请再次检查。当然,如果您有任何其他问题,请告诉我