2017-12-10 6 views
0

母集団を使用してスキーマにデータを追加する例がたくさんありますExpressでマングースを使用する

しかし、既存のデータとエラー処理の評価をExpressで使用するにはどうすればよいですか?私はすでにユーザーを作成していますが、今は既存のユーザーにログを追加したいと思います。

これは私のスキーマです:

私は私の道を失ったすべての良い例にもかかわらず

const logSchema = new Schema({ 
 
    logTitle: String, 
 
    postedBy: { 
 
     type: mongoose.Schema.Types.ObjectId, ref: 'User' 
 
    } 
 
    }); 
 

 
const userSchema = new Schema({ 
 
    
 
    _id: Schema.Types.ObjectId, 
 
    firstName: { 
 
     type: String, 
 
     required: true 
 
    } 
 
}); 
 

 
mongoose.model('User', userSchema); 
 
mongoose.model('Logs', logSchema);
nice examplesを正常に動作するExpressコードで使用するのは難しいです。

const mongoose = require('mongoose') 
 

 
const Log1 = mongoose.model('Logs'); 
 

 

 
const logCreate = function (req, res) { 
 
    const userid = req.params.userid; 
 
    Log1.create({ 
 
     logTitle: req.body.logTitle, 
 
     postedBy: userid._id 
 
    }); 
 

 
module.exports = {logCreate 
 
};

私は、最初の「ログ」に新しいログを作成し、既存のユーザーを評価しますか?誰かが私に正しい方向へのプッシュを与えることができますか?事前に感謝

答えて

0

postedByフィールドにobjectidを追加する必要があります。あなたは以下のルートを持っているとしましょう:

router 
    .route('/logs/') 
    .get(ctrlLogs.logsGetAll) 
    .post(ctrlLogs.logsAddOne); 

router 
    .route('/logs/:logid') 
    .get(ctrlLogs.logsGetOne); 

その後、我々は(これはctrlLogsある)としてコントローラ機能を定義することができます。

const mongoose = require('mongoose'); 
const Log = mongoose.model('Log'); 

module.exports.logsAddOne = (req, res) => { 
    Log.create({ 
    logTitle: req.body.logTitle, 
    postedBy: req.body.postedBy 
    }, (err, newLog) => { 
    let response = {}; 
    if (err) response = { status: 500, message: err }; 
    else response = { status: 201, message: newLog }; 

    return res.status(response.status).json(response.message); 
    }); 
}; 

module.exports.logsGetAll = (req, res) => { 
    Log 
    .find({}) 
    .populate('postedBy') 
    .exec((err, logs) => { 
     let response = {}; 
     if (err) response = { status: 500, message: err }; 
     else if (!logs) response = { status: 404, message: [] }; 
     else response = { status: 200, message: logs }; 

     return res.status(response.status).json(response.message); 
    }); 
}; 

module.exports.logsGetOne = (req, res) => { 
    Log 
    .findById(req.params.logid) 
    .populate('postedBy') 
    .exec((err, log) => { 
     let response = {}; 
     if (err) response = { status: 500, message: err }; 
     else if (!log) response = { status: 404, message: `Log with id ${req.params.logid} not found.` }; 
     else response = { status: 200, message: log }; 

     return res.status(response.status).json(response.message); 
    }); 
}; 

私は空白と簡潔にするため、中括弧の多くを削除しました。 req.bodyから直接値を持つものを作成したり、直接req.params.logidでクエリを作成したりしないでください。値を最初に検証する必要があります。バリデーションにはexpress-validatorなどのライブラリを使用できます。

我々は、次のリクエストボディと/ログにリクエストを掲載することによりことがわかります。

{ 
    "logTitle": "test log 32", 
    "postedBy": "5a2d1ec83ef998431c726dfc" 
} 

我々はIDを持つユーザーが5a2d1ec83ef998431c726dfcがpostedByユーザーとして設定されているログを作成します。私は/ログ/ 5a2d240c66d7b473a0aa6ec8(新しいログ)を取得した場合、私は得る:

{ 
    "_id": "5a2d240c66d7b473a0aa6ec8", 
    "logTitle": "test log 32", 
    "postedBy": { 
     "_id": "5a2d1ec83ef998431c726dfc", 
     "firstName": "test", 
     "__v": 0 
    }, 
    "__v": 0 
} 

私たちは、人口のログが同様にユーザーを返すことがわかります。

+0

ありがとうございました。私は今これを使用しようとしています。私が(返信で)尋ねる質問があれば大丈夫ですか? – Tichel

+0

@ティッセルはい、確かです。 – MikaS

+0

ありがとうございました!現時点では、ユーザーとログの作成は満足です。その後のテスト – Tichel

関連する問題