私はノードjs(6)とmongodb(3.0)を使って残りのAPI設定をしています。これは私がLinuxシステムに移植したリアクションアプリです。既に動作していたソースコードは変更されていません。 mongod --config /etc/mongod.conf
Mongodbノード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を持っていて、データサービスがヒットしています。私は何が欠けていますか?私はこのコードをさまざまなシステム上に移動し、うまくいきました。
コンソールにエラーがありますか?私はdb接続を開く場所が表示されません。 –
したがって、api/categoriesは200を返しますがデータは返しません。 console.log(items)はアイテムをログに記録しますか? – paqash
コンソールで404エラーが発生しました。 Console.log(items)は[]を返します。 –