web-dev-qa-db-ja.com

UnhandledPromiseRejectionWarningエラー:ホスト識別子のスラッシュ

ターミナルでnodemonindex.jsを実行しようとしていますが、次のエラーが発生します。これが何を意味するのかまったくわかりません。

誰かがこれを解決する方法を私に説明してもらえますか?

index.js

const express = require('express');
const morgan = require('morgan');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');

var app = express();

var router = require('./services/router');

mongoose.connect('mongodb://localhost:apiAuth');

app.use(morgan('combined'));
app.use(bodyParser.json());
app.use('/v1', router);

var PORT = process.env.PORT || 3000;
var Host = process.env.Host || '127.0.0.1';

console.log('Listening on', Host, PORT);
app.listen(PORT, Host);

services/router.js

var router = require('express').Router();

function protected(req, res, next) {
    res.send('Here is the secret!');
}

router.route('/protected')
    .get(protected);

module.exports = router;

ターミナル

[nodemon] restarting due to changes...
[nodemon] restarting due to changes...
[nodemon] starting `node index.js`
Listening on 127.0.0.1 3000
(node:29104) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: Slash in Host identifier
(node:29104) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
7
Markus Hayner

問題は、Mongooseを介したMongoDBへの接続に起因します。


ショートバージョン:

不正なログインURLを入力しました:

_mongoose.connect('mongodb://localhost:apiAuth');
                                      ^^^^^^^
_

私はあなたが書きたいと思います(またはそれに近いもの):

_mongoose.connect('mongodb://localhost:'+apiAuth);
_

MongoDBログインURLの例を次に示します:_mongodb://127.0.0.1:27017/my_db_。またはドキュメント: 標準接続文字列形式


ロングバージョン:

問題の解決策は上記と同じですが、自分で見つけたはずです。私の側では、私はそのように進めました(私はまったく同じ問題を抱えていたので、多くの情報がありました)。

  1. エラーを生成するコードを特定します。コードの一部にコメントするだけで、クラッシュしているゾーンを特定できます。
  2. Mongooseとの接続後にcatch()を追加します:mongoose.connect(...).catch((e) => { console.log(e); throw e; }。これにより、関係する行といくつかの追加情報が直接示されます。

この種の手法は多くの場合に機能します。

4
SiteXw

上記と同じエラーもあります(エラー:ホスト識別子のスラッシュ)。問題を解決しました。以下のようにマングースにアクセスしています。私のデータベースパスワードには@が含まれているので、パスワードに@特殊文字が含まれている場合に問題が発生しますencodeURIComponentを使用して渡す必要があります。以下のようにユーザー名とパスワードを渡しました。

エラー:

   mongoose.connect('mongodb://xxx-xx:7a?VNXd@@[email protected]:27017/xxxxx',function(err,db){
        if(err){
         console.log(err);
       }else {
           console.log('connected to the Test db');
       }
     }); 

解決されたコード:

 mongoose.connect('mongodb://xxx-xx:'+encodeURIComponent("7a?VNXd@#@safpV8=gRLwnNvC_8")+'@196.89.12.168:27017/xxxxx',function(err,db){
        if(err){
         console.log(err);
       }else {
           console.log('connected to the Test db');
       }
     }); 

私は同様のエラーに直面していました、私がしたことは

以前のエラーの原因となるバージョン:

mongoose.connect("mongodb://localhost:cat_app");

作業バージョン

mongoose.connect("mongodb://localhost/cat_app");

:が/に置き換えられることを除いて、両方とも同じです。

0