Узел JS | Ошибка типа: невозможно прочитать свойство 'first_name' из неопределенного

1

Я только начинаю с приложения MEAN, и я застреваю при добавлении данных в базу данных. Поэтому, пожалуйста, помогите мне найти решение для этого.

Это корневой файл, точка входа в приложение

//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();
const route=require('./routes/route');

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

//on connection
mongoose.connection.on('connected',()=>{
    console.log("Successfully established a connection to mongodb Database ")
});

//on error
mongoose.connection.on('error',(err)=>{
    if(err){
        console.log("Failed to established a connection "+err);
    }
});
const port=3000;
//For routing
app.use('/api',route);

//Adding middleware -cors
app.use(cors());

//body-parser
app.use(bodyparser.json());

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

//port no


app.get('/',(req,res)=>{
    res.send('Foobar');
});

app.listen(port,()=>{
    console.log("Server started listening to port "+port);  
})

И этот мой файл маршрута,

const express = require('express');
const router = express.Router();
// fetching the schema
const Contact = require('../Models/contacts');
//Retriving the contacts
router.get('/contacts', (req,res,next)=>{
    Contact.find(function(err,contacts){
        // Sending to client in json format
        res.json(contacts); 
    });
});

// Adding Contacts
router.post('/contact', (req,res,next)=>{
    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 sucessfully"});
        }
    });
});

//Deleteing contact
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;

Теперь я пытаюсь добавить несколько записей в DB (Mongo DB) с помощью почтового менеджера, но он выдает сообщение об ошибке "TypeError: Невозможно прочитать свойство" first_name "неопределенного, на router.post(C:\Mean App\ContactList\\ route.js маршруты: 16: 25)"

В postman для заголовка я использую "Content-type: application/json" и в сыром теле, я добавляю данные JSON, подобные этому,

{
    "first_name" : "Siddhesh",
    "last_name" : "Mishra",
    "phone" : "9594106324"
}

И вот мой код, где я создаю схему

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 ответа

3
Лучший ответ

Вы должны переместить body-parser выше маршрутов use и должны работать

//body-parser
app.use(bodyparser.json());

//For routing
app.use('/api',route);

Из Express API v4.x

app.use([path,] callback [, callback...])

...

Функции промежуточного программного обеспечения выполняются последовательно, поэтому порядок включения промежуточного программного обеспечения важен.

  • 0
    Спасибо брат! но можете ли вы объяснить мне, почему это работало раньше? Например, раньше, когда я вводил «localhost: 3000 / api / contact» в URL, тогда он работал. Почему он не работает при добавлении данных в БД?
  • 0
    Может быть, вы переупорядочили свой javascript в app.js могу этого знать ... :). Если вы проверите цитату, которую я указал, есть простой код, объясняющий промежуточное программное обеспечение и то, что вы должны опасаться.
Показать ещё 1 комментарий
0

body-parser должен пройти до маршрутов:

//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();
const route = require('./routes/route');

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

//on connection
mongoose.connection.on('connected', () => {
  console.log("Successfully established a connection to mongodb Database ")
});

//on error
mongoose.connection.on('error', (err) => {
  if (err) {
    console.log("Failed to established a connection " + err);
  }
});

const port = 3000;

//body-parser
app.use(bodyparser.json()); // here


//Adding middleware -cors
app.use(cors());

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

// For routing
app.use('/api', route);

app.get('/', (req, res) => {
  res.send('Foobar');
});

app.listen(port, () => {
  console.log("Server started listening to port " + port);
})

Чтобы всегда быть в безопасности, ваши маршруты всегда должны быть последними после всего промежуточного программного обеспечения.

  • 0
    Спасибо @Джон за информацию!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню