ウェブページにデータを入力すると、データはデータベースに正しく同期されます。
しかし、私は再び同じフォームに入力しようとすると、それがエラーを与える:NodejsアプリでE11000重複キーエラーが発生する
{
"code": 11000,
"index": 0,
"errmsg": "E11000 duplicate key error collection: test.creates index: aname_1 dup key: { : \"MicroSoft\" }",
"op": {
"aname":"MicroSoft",
"pname":"Bing",
"pusername":"Debtanu",
"_id":"57c9486d690a35fc21794169",
"__v":0
}
}
DBからすべてのものを削除し、同じフォームを埋めるために再び試みた後、それはエントリを取ります。
それで、なぜ同じアカウントフォームに次の入力をしないのですか?
以下は、私のapp.jsファイルとAccount.jadeファイルです。
app.js:
var express = require('express');
var favicon = require('serve-favicon');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
bodyParser = require('body-parser');
var session = require('express-session')
var mongoose = require('mongoose');
var nodemailer = require('nodemailer');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var bcrypt = require('bcrypt-nodejs');
var async = require('async');
var crypto = require('crypto');
var flash = require('express-flash');
var router = express.Router();
var fs = require('fs');
var createSchema = new mongoose.Schema({
cname: {type: String, unique: true, sparse: true},
aname : {type: String, unique: true, sparse: true},
ausername : String,
pname : {type: String, unique: true, sparse: true},
pusername : String
});
var Create = mongoose.model('Create', createSchema);
mongoose.connect('localhost');
var app = express();
// Middleware
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(session({
secret:'keyboard cat',
// connect-mongo session store
proxy: true,
resave: true,
saveUninitialized: true
}));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static(path.join(__dirname,'/public')));
app.use('/img',express.static(path.join(__dirname, 'public/images')));
app.get('/Account', function(req, res) {
res.render('Account', {
user: req.user
});
});
app.post('/Account', function(req,res,next){
var create = new Create({
cname: req.body.cname,
aname: req.body.aname,
ausername: req.body.ausername
});
create.save(function(err, doc){
if(err) res.json(err)
else res.redirect('/home');
});
});
// Server
app.listen(app.get('port'), function() {
console.log('Express server listening on port ' + app.get('port'));
});
module.exports = app;
account.jadeはあなたがスキーマにユニークフィールドとしてANAMEを宣言しているので、あなたが唯一の一意の値を保存することができ、適切な形式で
スキーマの作成は、アカウント変数を宣言するスキーマです。そして、私はnext()関数にいくつかの問題があると感じますが、それを正しく追加する方法はわかりません。 –
あなたのapp.jsを、わかりやすいインデントで読み取り可能にフォーマットしてください。どのように表示する必要があるかを示すJSONエラーメッセージを出しました。たぶん、この質問に関連するセクションを投稿するだけです。 –
いずれの場合でも、キーの重複エラーがあります。主キーがanameで、MicroSoftの値で2つのエントリを作成しようとしています。 –