私はMEANスタックの初心者レベルで、次のチュートリアルで作業しようとしています:adrianmejia.com/blog/2014/10/01/creating-a-restful-api-tutorial-with-nodejs-and-mongodb /。私はCloud 9オンラインIDEを使用しています。なぜ私はマングースValidationErrorを取得しますか?
このチュートリアルでは、curlとPostmanを使用してデータベースPOSTをテストする方法について説明します。私は正常にGET要求を投稿します。この時点で、チュートリアルのこの時点で空の配列が返されます。
私は curl -XGET myc9urlhere:8080/todos
使用 - 成功([]取得)で
とcurl -XPOST myc9urlhere:8080/todos -d 'name=Somename&completed=false¬e=somenote'
してみてください - 失敗
をスタックトレースがあり、次のように:
ValidationError: Todo validation failed
at MongooseError.ValidationError (/home/ubuntu/workspace/todo-api/node_modules/mongoose/lib/error/validation.js:23:11)
at model.Document.invalidate (/home/ubuntu/workspace/todo-api/node_modules/mongoose/lib/document.js:1486:32)
at model.Document.set (/home/ubuntu/workspace/todo-api/node_modules/mongoose/lib/document.js:753:10)
at model._handleIndex (/home/ubuntu/workspace/todo-api/node_modules/mongoose/lib/document.js:596:14)
at model.Document.set (/home/ubuntu/workspace/todo-api/node_modules/mongoose/lib/document.js:556:24)
at model.Document (/home/ubuntu/workspace/todo-api/node_modules/mongoose/lib/document.js:68:10)
at model.Model (/home/ubuntu/workspace/todo-api/node_modules/mongoose/lib/model.js:47:12)
at new model (/home/ubuntu/workspace/todo-api/node_modules/mongoose/lib/model.js:3250:13)
at /home/ubuntu/workspace/todo-api/node_modules/mongoose/lib/model.js:1864:51
at /home/ubuntu/workspace/todo-api/node_modules/mongoose/node_modules/async/internal/parallel.js:27:9
at eachOfArrayLike (/home/ubuntu/workspace/todo-api/node_modules/mongoose/node_modules/async/eachOf.js:57:9)
at exports.default (/home/ubuntu/workspace/todo-api/node_modules/mongoose/node_modules/async/eachOf.js:9:5)
at _parallel (/home/ubuntu/workspace/todo-api/node_modules/mongoose/node_modules/async/internal/parallel.js:26:5)
at parallelLimit (/home/ubuntu/workspace/todo-api/node_modules/mongoose/node_modules/async/parallel.js:85:26)
at /home/ubuntu/workspace/todo-api/node_modules/mongoose/lib/model.js:1882:5
at Function.create (/home/ubuntu/workspace/todo-api/node_modules/mongoose/lib/model.js:1852:17)
小さなノートでは、私も持っているということですChrome拡張機能Postmanを使用してこれを試しました。チュートリアルでは、x-www-form-urlencoded
を使用しなければならないと言います。同じエラーが返されます。スクリーンショットを参照してください。代わりにフォームデータ設定を使用すると、データベースにデータを挿入するのに成功しますが、ちょうど偽のものになります。 2番目のスクリーンショットを参照してください。
私は本当に自分自身を研究しようとした - 多分このチュートリアルでは、どちらかの開始:)への最大の場所ではありません。以下に、コードの詳細をいくつか紹介します。
ありがとうございました。 (Todo.js)示すように、チュートリアルと同じです
、私は、TODOリスト項目のためのモデルを作成しました:
var mongoose = require('mongoose');
var TodoSchema = new mongoose.Schema({
name: String,
completed: Boolean,
note: String
});
module.exports = mongoose.model('Todo', TodoSchema);
今私の特急ルーティングファイルtodos.jsに私は、次のコードを持っています:私はここで間違っている内容を正確に把握していないので
var express = require('express');
var router = express();
//express.Router() was the original here, that failed on router.get
//as router was then undefined for some reason.
var Todo = require('../models/Todo.js');
/* GET /todos listing. */
router.get('/', function(req, res, next) {
Todo.find(function (err, todos) {
if (err) return next(err);
res.json(todos);
});
});
/* POST /todos */
router.post('/', function(req, res, next) {
Todo.create(req.body, function (err, post) {
if (err) return next(err);
res.json(post);
});
});
module.exports = router;
私も、データベース接続
var routes = require('./routes/index');
var users = require('./routes/users');
var todos = require('./routes/todos');
var app = express();
// load mongoose package
var mongoose = require('mongoose');
// Use native Node promises
mongoose.Promise = global.Promise;
// connect to MongoDB
mongoose.connect('mongodb://'+process.env.IP+'/todo-api')
.then(() => console.log('connection succesful'))
.catch((err) => console.error(err));
app.use('/', routes);
app.use('/users', users);
app.use('/todos', todos);
を示す私のapp.jsの抽出物を掲載します
そして、生成されたパッケージ-JSON(私はクラウド9 IDEを使用しています)
{
"name": "application-name",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"ejs": "*",
"express": "3.2.6",
"mongoose": "^4.7.6"
}
}
お返事ありがとうございます。私はあなたの提案を実験しましたが、問題は解決しません。 名前、完成したノート、および要求の本文から正しい値を抽出できました。それらはすべて正しいようですが、完成したパラメータがキャッシュされているかのように思えますが、クライアント側で変更した直後にサーバ側で変更されないので、古い値をしばらく保存しているようです。 bodyパラメータに有効なブール値を強制的に加えようとしたところ、 req.body.completed = true; これにより、検証エラーも削除されません。 – BenM