ホーム>source

開発中、私はこのmongodbコードブロックを使用してデータベースに接続してきましたが、問題なく機能していますが、Azureにデプロイするときは機能しません。

<前>ウィズウィズ

アプリをAzureにデプロイするときに接続に問題が発生したため、Azureサポートから使用する別のmongodbコードブロックが与えられました

<前>ウィズウィズ

、しかし私が元の代わりにこのmongodbコードを使用すると、 mongoose .connect( "mongodb://" + process.env.COSMOSDB_HOST + ":" + process.env.COSMOSDB_PORT + "/" + process.env.COSMOSDB_DBNAME + "?ssl=true&replicaSet=globaldb", { auth: { user: process.env.COSMOSDB_USER, password: process.env.COSMOSDB_PASSWORD } } ) .then(() => console.log("Connection to CosmosDB successful")) .catch(err => console.error(err)); が得られますアプリにログインしようとしたとき。何故ですか?

ログインAPI

<前>ウィズウィズ var mongoDBurl = process.env.MONGODB_CONNECTION; mongoose.connect(mongoDBurl, { useNewUrlParser: true }); var db = mongoose.connection; db.on('error', console.error.bind(console, 'MongoDB connection error:')); db.once('open', (callback) => { console.log('MongoDB connectted!!'); });
あなたの答え
  • 解決した方法 # 1

    理由

    それは、 return  あなたの約束の声明はあなたの then を終わらせません さんのキュー。あなたは 401 に応答しています   User が見つからない場合 、次に2番目の then 、結果がない場合は、再度401を応答します。

    Expressは、ヘッダーを2回送信することはできないと言っていますが、これは事実です。あなたのコードにはMongoDB関連の問題は何もないと思います。

    ヒント:ルートを try/catch/await に変換してみてください  何が起こっているのかをよりよく理解するためのコード

    可能な解決策

    編集:これはうまくいくはずです

    ウィズウィズ
    
    ウィズウィズ ウィズウィズ はコードを理解するのに役立ちます!

    MongoDB認証

    MongoDB認証に関しては、最初の方法と同じ資格情報を使用する必要があります

    ウィズウィズ
    
    // You don't need next as you're ending the request here and not calling it anyway router.post("/login", async (req, res) => { const user = await User.findOne({ email: req.body.email }); if (!user) { return res.status(401).json({ message: "Auth failed" }); } const { username } = user; const goodPassword = bcrypt.compareSync(req.body.password, user.password); if (!goodPassword) { return res.status(401).json({ message: "Auth failed" }); } const token = jwt.sign( // Double check if this call is synchronous or not (needs await or not) { email: user.email, userId: user._id, username: username }, "secret_this_should_be_longer", { expiresIn: "1h" } ); // Maybe store the token in the cookies instead of sending back, as you wish ! res.status(200).json({ token: token, expiresIn: 3600, userId: user._id, username: username }); });

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ javascript - 関数の引数に基づいてPromiseの戻り値の型を推測する方法は?