2017-12-01 5 views
1

MEANアプリケーションから始めて、データベースにデータを追加している間にimが立ち往生しました。ですから、この解決策を見つけるのを手伝ってください。ノードJS | TypeError:未定義の 'first_name'プロパティを読み取ることができません。

これは、ルート・ファイル、アプリケーションのエントリポイント

//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にいくつかのレコードを追加しようとしていますDB)を使用していますが、 "TypeError:router.post(C:\ Mean App \ ContactList \ routes \ route.js:16:25)で未定義のプロパティ 'first_name'を読み取れません"というエラーが発生しています "

郵便配達員では、ヘッダーの場合、私は私は、このような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); 
スキーマ

を作成しています私のコードですよ、生体内で:「『アプリケーション/ JSONコンテンツタイプ』を使用してメートル

ありがとうございます。

答えて

2

あなたはルートusebody-parserを移動する必要がありますし、ルートの前に行くためのExpress API v4.x

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

...

Middleware functions are executed sequentially, therefore the order of middleware inclusion is important.

+0

ありがとう、兄弟!なぜそれが以前に働いていたのかを私に説明することができます。たとえば、先にURLに「localhost:3000/api/contact」と入力すると、以前は動作していました。なぜDBにデータを追加する間に実行されないのですか? –

+0

たぶんあなたは本当にそれを知っている 'app.js' cantのjavascriptを並べ替えました::)私が指摘している見積もりをチェックすると、ミドルウェアを説明するシンプルなコードと注意しなければならないことがあります。 – Stamos

+0

あなたに愚かな質問をして申し訳ありません、これに完全に新しい私はこれが期待されました。 –

0

body-parserニーズから

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

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

を動作するはずです:常に

//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

@Johnに感謝します! –

関連する問題