在平均堆栈后方法中键入错误

时间:2018-03-11 12:11:28

标签: node.js mongodb rest express

MEAN Stack

我一直在

  

TypeError:无法读取属性' first_name'未定义的

尝试执行此代码时(所有变量,包括模块在代码的其他部分中定义)。使用GET方法时,我的代码工作正常。但对于POST方法,它会抛出错误。附上下面的截图。

Advance Rest Client POST Method Exception

在下面添加了我的代码。

提前致谢



//app.js
//Importing Modules

var express = require('express');
var mongoose = require('mongoose');
var bodyparser = require('body-parser');
var cors = require('cors');
var path = require('path');

var app = express();

//port Number
const port = 3000;

const route = require('./routes/route');

//Connect to MongoDB
mongoose.connect('mongodb://localhost:27017/contactlist');

//if connected
mongoose.connection.on('connected', () => {
  console.log("Mongo DB Connected successfully");
});

//if not connected
mongoose.connection.on('error', (err) => {
  if (err) {
    console.log('Error in connecting to the MongoDB');
  }
});

//adding middleware cors
app.use(cors());

//routes will happen here
app.use('/api', route);

//adding middleware
app.use(bodyparser.json());

//Static files
app.use(express.static(path.join(__dirname, 'public')));

//Testing
app.get('/', (req, res) => {
  res.send("Hello Vinoth");
});

app.get('/yahoo', (req, res) => {
  res.send("Hello Vinoth");
});

//Connection
app.listen(port, () => {
  console.log("Server started at port:" + port);
});






//route.js
const express = require('express');
const router = express.Router();

const Contact = require('../models/contacts');

// retrieving details
router.get('/contacts', (req, res, next) => {
  Contact.find(function(err, contacts) {
    res.json(contacts);
  });
});

// Add Contacts
//Add contact
router.post('/contact', (res, req, next) => {
  console.log('Insides');
  let newContact = new Contact({
    first_name: req.body.first_name,
    last_name: req.body.last_name,
    phone: req.body.phone
  });

  newContact.save((err, contact) => {
    if (err) {
      res.json({
        msg: 'Failed to add contact'
      });
    } else {
      res.json({
        msg: 'Contact added successfully'
      });
    }
  });
});

// Delete Contacts
router.delete('/contact/:id', (req, res, next) => {
  Contact.remove({
    _id: req.params.id
  }, function(err, result) {
    if (err) {
      res.json(err);
    } else {
      res.json(result);
    }
  });
});

module.exports = router;






//contacts.js
const mongoose = require('mongoose');

const ContactSchema = mongoose.Schema({
  first_name: {
    type: String,
    required: true
  },
  last_name: {
    type: String,
    required: true
  },
  phone: {
    type: String,
    required: true
  }
});

const Contact = module.exports = mongoose.model('Contact', ContactSchema);




2 个答案:

答案 0 :(得分:0)

尝试在app.use(bodyparser.json())之前移动app.use('/api', route)。希望这会有所帮助。

答案 1 :(得分:0)

首先,您需要声明

//adding middleware
app.use(bodyparser.json());

使用前所有路线。因此,您需要更新app.js,如:

//adding middleware
app.use(bodyparser.json());

//routes will happen here
app.use('/api', route);

另外,您需要像这样重构route.js 代码:

//Add contact
router.post('/contact', (res, req, next) => {

    const {
        first_name,
        last_name,
        phone
    } = req.body;

    let newContact = new Contact({
        first_name,
        last_name,
        phone
    });

    newContact.save((err, contact) => {

        if (err) {
            res.json({
                msg: 'Failed to add contact'
            });
        } else {
            res.json({
                msg: 'Contact added successfully'
            });
        }

        });
});