【问题标题】:Connecting Node.js to MongoDB remotely, what is the url to hit for my API?将 Node.js 远程连接到 MongoDB,我的 API 的 url 是什么?
【发布时间】:2016-10-27 14:31:14
【问题描述】:

所以我在 Node.js/Express/MongoDB 中构建了一个应用程序,并且我遵循了一些 teamtreehouse 教程,但那是通过你的 shell 而不是在远程服务器上运行 Node.js。我已经在 Digital Ocean Server 上设置了 Node.js 和 MongoDB,它说我可以连接,但是我已经尝试使用不同的 url 来访问我的 api。

现在我的应用程序从 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 的端点并得到响应吗?

目前,当我尝试使用 Postman 时,我收到以下回复:

<!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 连接(database.js):

'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");
}
});

我的服务器 shell 的 Mongo 输出:

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 输出:

root@joshuaericbenner:/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;

【问题讨论】:

  • 当您到达端点时,您实际得到了什么输出?控制台说什么?
  • 显示你的用户模型
  • @katylavallee 添加。我认为它应该可以工作,因为虽然我没有任何具有完整架构的记录,但我有一个带有 formattedName 的记录。
  • @Soviut 我的控制台输出是我在“邮递员”下写的。然后下面是 shell 的 Mongo 输出,下面是 shell 的 Node.js 输出
  • 好的,你的服务器 (Apache) 正在为http://joshuaericbenner.me/ 的请求提供服务,并且你的 Node 应用程序正在监听该服务器的 8080 端口。首先,你的服务器当前公开了你的源代码,如果我转到http://joshuaericbenner.me/projects/sideprojects/LinkedInApp/,我可以从linkedInAjax.js 文件中获取您的LinkedIn 客户ID 和密码。其次,如果您希望 Node 为这些请求提供服务,您需要告诉 apache 将请求从端口 80 转发到端口 8080。不了解 Apache,在 Nginx 中它是一个 proxy_pass 指令。

标签: javascript node.js mongodb server


【解决方案1】:

问题出在您的路线上。您正在呼叫/api/users,而您的路由配置为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});
});
} );

【讨论】:

  • 抱歉添加了我的 App.js 以进行澄清。不知道它是否改变了任何东西,但我认为我的路线将是 /api/users 就像我做的那样 api.use('/api', router);
猜你喜欢
  • 2017-04-22
  • 2019-10-06
  • 2023-03-14
  • 1970-01-01
  • 2019-06-01
  • 2017-06-14
  • 2019-12-22
  • 1970-01-01
  • 2021-09-24
相关资源
最近更新 更多