2017-02-13 14 views
0

ルートがここに登録されていないのはなぜですか?何らかの理由で、/ api/testにアクセスすると404が見つかりません。ルート登録をその機能の外に移動すると機能します。このスニペットは、明示的に生成されたテンプレートからapp.jsに追加されます。Express JSルートがPromise内部で動作しない

var Q = require('q'); 

promisify().then(stringText => { 
    var route = express.Router(); 
    route.get('/test', (req, res) => res.send('Hi')); 
    app.use('/api', route); 
}); 

function promisify() { 
    var deferred = Q.defer(); 
    deferred.resolve('Hello World'); 
    return deferred.promise; 
} 

(あなたが外ルート登録を移動した場合)これは動作します:

var Q = require('q'); 

var route = express.Router(); 
route.get('/test', (req, res) => res.send('Hi')); 
app.use('/api', route); 

promisify().then(stringText => { 

}); 

function promisify() { 
    var deferred = Q.defer(); 
    deferred.resolve('Hello World'); 
    return deferred.promise; 
} 

更新:階段からexpressに入力して、フォルダの特急テンプレートを作成します

  1. を再現するためにコマンドライン。
  2. その後、パッケージnpm installをインストールします。
  3. また、q個のライブラリをインストールし、npm install --save q
  4. はちょうど他のルートを登録コードの下のコードを追加します。

    app.use('/', index); 
    app.use('/users', users); 
    
    // Add the code above here 
    
+0

私の推測では、あなたが「catch-を残しているということですハンドルされていないリクエストを捕捉するためにインストールされたすべてのハンドラ。ハンドラが定義された順序のために、APIハンドラの前に_呼​​び出されます。 – robertklep

答えて

0

コンソール内の任意のエラーを取得していますか?あなたがサーバーを起動していない場合は?私はあなたのロジックをやってみました(約束約束の内側と外側の両方)と私はそれがコールバック

http://localhost:3000/api/test

1.Inside約束に以下のコードを

const express = require('express'); 
const app = express(); 
const Q = require('q'); 

promisify().then(stringText => { 
    console.log("called promise success"); 
    console.log(stringText); 
    var route = express.Router(); 
    route.get('/test', (req, res) => res.send(stringText)); 
    app.use('/api', route); 
}); 

function promisify() { 
    const deferred = Q.defer(); 

    if (true) deferred.resolve('Hello Chris James'); 

    return deferred.promise; 
} 

app.listen(3000, function() { 
    console.log('Example app listening on port 3000!') 
}) 

2.Outsideプロミスコールバックを働いた

const express = require('express'); 
const app = express(); 
const Q = require('q'); 

var route = express.Router(); 
route.get('/test', (req, res) => res.send('Hi')); 
app.use('/api', route); 

promisify().then(stringText => { 

}); 

function promisify() { 
    var deferred = Q.defer(); 
    deferred.resolve('Hello World'); 
    return deferred.promise; 
} 

app.listen(3000, function() { 
    console.log('Example app listening on port 3000!') 
}); 

Package.json

{ 
    "name": "route-check", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1", 
    "start" : "node index.js" 
    }, 
    "author": "", 
    "license": "ISC", 
    "dependencies": { 
    "express": "^4.14.1", 
    "q": "^1.4.1" 
    } 
} 
+0

はい、呼び出されています。しかし、あなたがURLを介してアクセスすると、404を送信しています.Express.Routerを外に出すと、問題なくURLにアクセスできます。 – Chris

+0

ブラウザを介してurl http:// localhost:3000/api3/testにアクセスしました。 –

+0

ああええ、それは動作します。ありがとう。私の問題は、明示的に生成されたテンプレート内で、そのコードをapp.jsの中に置くときです – Chris

関連する問題