2017-10-02 27 views
0

私はノードjs(6)とmongodb(3.0)を使って残りのAPI設定をしています。これは私がLinuxシステムに移植したリアクションアプリです。既に動作していたソースコードは変更されていません。 mongod --config /etc/mongod.confMongodbノードjs残りのapi

をここに私の設定ファイルされる:私は使用して私のmongo DBサーバを始めている

dbpath=/home/mo/Documents/dev/data/mongodb/ 

#bindIp: [127.0.0.1, X.X.X.X] 

bind_ip = 127.0.0.1 

#logpath = /var/log/mongodb/mongod.log 

logappend = true 

ここでは、APIを介してのMongoDBからデータを取得するための私のコード(dataservice.js)です:

var mongodb = require('mongodb'); 

var db = new mongodb.Db('expenses', new mongodb.Server('localhost', 27017, {})); 

db.open(function (err, db_p) { 
    if (err) { throw err; } 
    db.collection('expenses', {strict:true}, function(err, collection) { 
     console.log("Connected successfully to server and expenses collection"); 
     if (err) { 
     console.log("The 'expenses' collection doesn't exist."); 
     //populateDB(); 
     } 
    }); 
}); 

exports.getCategories = function(req, res) { 
    console.log('get distinct categories function entered'); 

    db.collection('expenses', function(err, collection) { 
     collection.distinct("category",function(err, items) { 
      console.log('search: distinct category'); 
      console.log(items); 
      items.sort(); 
      res.json(items); 
      // db.close(); 
     }); 
    }); 
} 
ここで

私server.jsファイルです:

const express = require('express'); 

const dataHandler = require('./db/dataService.js'); 

const bodyParser = require('body-parser'); 

const app = express(); 

app.set('port', (process.env.PORT || 3001)); 

// Express only serves static assets in production 
if (process.env.NODE_ENV === 'production') { 
    app.use(express.static('client/build')); 
} 

//allow cross origin access to avoid error received from using node-fetch, the problem does not exist when axios is used 
app.use(function(req, res, next) { 
    //res.header("Access-Control-Allow-Origin", "*"); 
    res.header('Access-Control-Allow-Origin', 'http://localhost:3000'); //allow access from this port 
    res.header('Access-Control-Allow-Credentials', true); 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept") 
    next(); 
}); 

app.use(bodyParser.json()); // support json encoded bodies 
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies 


app.get('/api/test', function(req, res) { 
    res.send([{name:'wine1'}, {name:'wine2'}]); 
}); 

//test api: http://localhost:3001/api/categories 

app.get('/api/categories', dataHandler.getCategories); 

だけに電話をテストしますはうまく動作します。ただし、http://localhost:3001/api/categoriesはデータを返しません。私はデータがそこにあることを知っている。私はいくつかのconsole.logを持っていて、データサービスがヒットしています。私は何が欠けていますか?私はこのコードをさまざまなシステム上に移動し、うまくいきました。

+0

コンソールにエラーがありますか?私はdb接続を開く場所が表示されません。 –

+0

したがって、api/categoriesは200を返しますがデータは返しません。 console.log(items)はアイテムをログに記録しますか? – paqash

+0

コンソールで404エラーが発生しました。 Console.log(items)は[]を返します。 –

答えて

0

問題を解決しました。簡単な見落としがありました。私はarounを見ていくつかを学んだが、それは価値があったので。私は自分の接続に正しいデータベース名を渡さなかった。私はコレクション名を渡していました。したがって、この行にはテスト費用は含まれません。

var db = new mongodb.Db('expenses', new mongodb.Server('localhost', 27017, {})); 

この場合、私はこれを単に削除するか、そのままにしますか?

関連する問題