2016-11-22 16 views
0

私はexpress.jsコーディングを始めました。下のコードでは、getメソッドを使用して異なるリクエストを処理するために、http://localhost:3000http://localhost:3000/fetchのような2つのURLにアクセスしたいと考えています。最初のURLにアクセスしている間、私は応答を得ることができますが、2番目のURLにアクセスしているうちに404エラーが発生しています。私は問題を把握することができません、あなたはこれで私を助けてくださいできますか?expressjsコードで無効なURLメッセージを取得しています

以下

が私のファイルです:

app.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var index = require('./routes/index'); 
var fetch = require('./routes/fetch'); 

var app = express(); 


// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'pug'); 

app.use('/fetch',fetch); 
app.use('/', index); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('SmartBin: Invalid URL'); 
    err.status = 404; 
    next(err); 
}); 

modules.export=app; 

index.js

var express = require('express'); 

/* GET home page */ 
module.exports = (function() { 
    var path = require('path'); 
    var bodyParser = require('body-parser'); 
    var db = require('./dbclient'); 
    db.dbconnection(null,null,null,null,'smartbin',null); 
    var router = express.Router(); 
    router.get('/', function(req, res, next) { 
     //res.render('index', { title: 'Express' }); 
     db.get('devicereg',{}).then(function(v){ 
      //for (i=0; i<v.length-1; i++) 
       //res.json(v[i]); 
      res.json(v);//.end(); 
     }).catch(function(v){ 
      console.log('[SmartBin:Error ' + v); 
     });   
    }); 
    return router; 
})(); 

fetch.js

var express = require('express'); 

/* GET home page. */ 
module.exports = (function(){ 
    var path = require('path'); 
    var bodyParser = require('body-parser'); 
    var router = express.Router(); 
    var db = require('./dbclient'); 
    db.dbconnection(null,null,null,null,'smartbin',null); 
    router.get('/fetch', function(req, res, next) { 
      db.get('devicereg',{}).then(function(v){ 
       res.json(v); 
      }).catch(function(v) 
       {console.log('[SmartBin:Error ' + v);} 
      ); 
    }); 
    return router; 
})(); 

答えて

0

私はあなたがこれらのいずれかのオプションを試みることができると思う:

1.マイナーチェンジ:あなたのapp.jsapp.use('/', index)app.use('/', 'fetch')を使用して

を。あなたのルートはindex.jsfetch.jsファイル内に設定されているので、app.jsコードapp.use('/fetch', 'fetch')がなくても動作するはずです。既存のコードで

(あなたがapp.js/fetchを宣言し、再度/fetchfetch.jsでファイルを宣言しているため)あなたはおそらくhttp://localhost:3000/fetch/fetchにアクセスすることができます。

2.ルート・ファイルへのパラメータ渡しapp:あなたのapp.js

、代わりにapp.use('/', index)app.use('/fetch', fetch)の、appのインスタンスを渡すあなたのルートファイルを必要としてみてください。

例:

index.js

module.exports = function(app) { 
    app.get('/', function(req, res) { 
     res.send("This is index"); 
    }); 
} 

app.jsあなたのルートファイルで

var express = require('express'); 
var app = express(); 

// Comment these lines 
//app.use('/fetch',fetch); 
//app.use('/', index); 

// Add this lines passing the instance of 'app' you've created 
var indexRoute = require('./routes/index')(app) 
var indexFetch = require('./routes/fetch')(app) 

、以下のように適応してみてください

module.exports = function(app) { 
    app.get('/fetch', function(req, res) { 
     res.send("This is fetch"); 
    }); 
} 

を取り出して、これがお役に立てば幸いです。

関連する問題