[解決済み] Mongoose インスタンス .save() が動作しない
2022-02-19 10:37:26
質問
MongooseとMongoDbで問題があります。
非常に興味深いのは
Model.update
が動作し
save
は動作せず、コールバックも発生しません。
マングース 4.4.5 MongoDB: 3.0.8
エクスプレスルート
var mongoose = require('mongoose');
mongoose.connect("mongodb://127.0.0.1:27017/db");
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function(callback) {
console.log("connection to db open")
});
var User = require("../models/user.js");
ユーザーモデル
var user = new Schema({
uid: { type: Number, required: true, unique: true},
hwid: { type: String, default:""},
bol:{type:String,default:""}
});
エンポイントの更新
作業バージョンです。 モデル.update()
User.update({_id: id}, {
uid: 5,
}, function(err, numberAffected, rawResponse) {
console.log(err);
})
動作しないバージョン、これを解決しなければならない。 オブジェクト.save()
User.find({_id:id}, function(err,user){
if(err){
console.log(err);
}
if(!user){
console.log("No user");
}else{
user.uid = 5;
user.save(function(err,news){
console.log("Tried to save...");
});
}
console.log("At least worked");
})
コールバックも発火しない。接続は正常に開かれています。コールバックが起動することはありません。
-
を使おうとした。
var User = connection.model('User', schema)
は動作しませんでした。
解決方法は?
この質問は、他の人も遭遇する可能性があるので、削除するつもりはありません。実はこの問題はMongoDbやMongooseとは関係ないのです。この問題は
Object.save()
責任の連鎖は以下のようになります。
- Schema.pre("save")
- データをdabeに保存する
- Schema.post("保存")を実行します。
ということで、ブロックすると
pre("save")
を呼び出さず
next()
ハンドラを使用すると、ドキュメントを保存することができません。これは私の場合です、私は
next()
をif文の中で呼び出し、3時間以上エラーを見つけようとしました。
user.pre("save", function(next) {
if(!this.trial){
//do your job here
next();
}
}
いつ
this.trial == true
次のハンドラに到達できない。
このようなエラーを防ぐには、ブランチカバレッジに注意する必要があります。あなたの問題もこれと関係があるかもしれません。
を呼び出しているか確認してください。
next()
ドキュメントを保存する必要がある場合。
修正版
user.pre("save", function(next) {
if(!this.trial){
//do your job here
}
next();
}
関連
-
[解決済み] エラー: nodejs の get 呼び出しで getaddrinfo ENOTFOUND が発生しました。
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】MongoClient v3.0使用時、db.collectionは関数ではない
-
[解決済み】E11000重複キーエラー mongodb mongooseのインデックス
-
[解決済み] nvm は npm config の "prefix" オプションと互換性がありません。
-
[解決済み] -saveと-save-devの違いは何ですか?
-
[解決済み] 配列フィールドが空でない MongoDB レコードを検索する
-
[解決済み] npm installの-saveオプションは何ですか?
-
[解決済み] Mongooseで文書を更新/アップサートするにはどうしたらいいですか?
-
[解決済み] Mongooseの"__v "フィールドとは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Express.js req.bodyが未定義です。
-
[解決済み】Nodejsの解決方法:Error: ENOENT: そのようなファイルまたはディレクトリがありません
-
[解決済み】passport.js passport.initialize() ミドルウェアが使用されていません。
-
[解決済み】Passport.js - エラー: ユーザーのセッションへのシリアライズに失敗しました。
-
[解決済み】「npm install」と「npm rebuild」の違いとは?
-
[解決済み】Heroku + node.jsのエラー(Webプロセスが起動後60秒以内に$PORTにバインドできなかった)。
-
[解決済み] Expectアサーションの型エラー -> expect(...).toExistは関数ではない
-
[解決済み] nodejsでfindAllのソート順を続編にする
-
[解決済み] MongoNetworkError: 最初の接続でサーバー [localhost:27017] への接続に失敗 [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017] 。
-
[解決済み] Macでポート3000をロックしているプロセスを見つける(そして殺す)【終了