2016-10-27 9 views
0

私はNode.js/Express/MongoDBにアプリケーションをビルドしていますが、チームツリーハウスのチュートリアルに従っていますが、これはリモートサーバーではなくシェルを介してNode.jsを実行することでした。私はNode.jsとMongoDBをDigital Ocean Serverにセットアップしましたが、私は接続することができますが、私は私のAPIのためにヒットするURLの差異を試しました。Node.jsをリモートからMongoDBに接続すると、私のAPIのヒットするURLは何ですか?

今、私のアプリケーションはhttp://joshuaericbenner.me/projects/sideprojects/LinkedInApp/public/

から実行されていて、私のファイル構造は、ようにされています

LinkedInAppp 
-> public -> index.html 
-> src 
     -> api -> index.js (where the api calls exist) 
     -> database.js 

だから私の質問は、私はhttp://joshuaericbenner.me/projects/sideprojects/LinkedInApp/api/usersのエンドポイントを打つと応答を取得すべきではないですか? (database.js)

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html> 
<head> 
    <title>404 Not Found</title> 
</head> 
<body> 
    <h1>Not Found</h1> 
    <p>The requested URL /projects/sideprojects/LinkedInApp/api/users was not found on this server.</p> 
    <hr> 
    <address>Apache/2.4.18 (Ubuntu) Server at joshuaericbenner.me Port 80</address> 
</body> 

MongoDBの接続::私はポストマンにしようとすると

は現在、私はの応答を取得

'use strict'; 
var mongoose = require('mongoose'); 

mongoose.connect('mongodb://127.0.0.1:27017/LinkedInUsers',function(err){ 
if(err){ 
    console.log("Failed to connect to mongodb"); 
} 
else{ 
    console.log("Successfully connected to mongodb"); 
} 
}); 
私のサーバーのシェルから

モンゴ出力:

MongoDB shell version: 2.6.10 
connecting to: test 
> show dbs 
LinkedInUsers 0.078GB 
admin   (empty) 
local   0.078GB 
test   0.078GB 
> use LinkedInUsers 
switched to db LinkedInUsers 
> db.post.find() 
{ "_id" : ObjectId("5810e578059f3fc430a6089b"), "formattedName" : "jb"   } 

Node.jsの出力私は自分のNode.jsアプリケーションを実行すると:

[email protected]:/var/www/html/projects/sideprojects/LinkedInApp# nodejs src/app.js 
Now running on port 8080 
Successfully connected to mongodb 

ExpressのAPI(上記のようにindex.js):

'use strict'; 

var express = require('express'); 
var User = require('../models/user'); 
var router = express.Router(); 

//Get All Users 
router.get('/users', function (req, res){ 
User.find({}, function(err, users){ 
    if(err){ 
     res.status(500).json({message: err.message}); 
    } 
    res.json({users: users}); 
}); 
}); 

App.js は '厳格な使用';

var express = require('express'); 
var parser = require('body-parser'); 
var router = require('./api'); 

var app = express(); 

require('./database'); 
require('./seed'); 

app.use(parser.json()); 
app.use('/', express.static('public')); 

app.use('/api', router); 

app.listen(8080, function(){ 
    console.log("Now running on port 8080"); 
}); 

ユーザーモデル:

'use strict'; 

var mongoose = require('mongoose'); 
var userSchema = new mongoose.Schema({ 
    formattedName: String, 
    id: String, 
    location: { 
     country: { 
      code: String 
     }, 
     name: String 
    }, 
    positions: 
    { 
     values: 
     [ 
      { 
       company: { 
        id: Number, 
        location: { 
        name: String 
       } 
      }, 
      location: { 
       name: String 
      }, 
      id: Number, 
      isCurrent: Boolean, 
      summary: String, 
      title: String 
     } 
    ] 
    }, 
    publicProfileUrl: String 
}); 

var model = mongoose.model('User', userSchema); 

module.exports = model; 
+0

エンドポイントにヒットしたら実際にどのような出力が得られますか?コンソールは何を言いますか? – Soviut

+0

あなたのユーザーモデルを表示する –

+0

@katylavalleeが追加されました。完全なスキーマを持つレコードはありませんが、formattedNameを持つレコードがあるため、これが機能するはずです。 – joshbenner851

答えて

0

問題は、あなたのルートです。あなたのルートがusersに設定されている間に/api/usersに電話をかけています。

router.get('/api/users', function (req, res){ 
User.find({}, function(err, users){ 
    if(err){ 
     res.status(500).json({message: err.message}); 
    } 
    res.json({users: users}); 
}); 
}); 
+0

申し訳ありませんが、わかりやすく私のApp.jsを追加しました。それが何か変わるかどうかわからないけど、api.use( '/ api'、router)と同じように私のルートは/ api/usersだと思った。 – joshbenner851

関連する問題