无法通过浏览器访问mongodb - 看起来您正在尝试通过本机驱动程序端口上的HTTP访问MongoDB

时间:2014-05-03 16:15:02

标签: node.js mongodb express

我打开终端并输入以下命令

sudo mongod

然后输出

[initandlisten] waiting for connections on port 27017

我打开另一个终端并输入

sudo mongo

打开mongo shell并提示输入mongo命令,但是当我转到localhost / 27017时,我收到以下消息:

It looks like you are trying to access MongoDB over HTTP on the native driver port.

我使用express创建了一个简单的nodejs应用程序,当我POST数据时,似乎mongodb被挂起了。这是我在终端中收到的消息,我在其中启动我的快速应用程序,页面从不发布数据。所以我认为问题在于mongo,但我无法弄明白。

POST /info 200 120002ms

这是我的快递代码

var Info = require('../models/info');
var path = require('path');
var fs = require('fs');
var join = path.join;

exports.form = function(req,res){

    res.render('info', {
        myName: 'Michael'
    });
};

exports.submit = function(){
console.log('Within exports.submit 1');
    return function(req,res,next){
        console.log('Within exports.submit 2 ');
        var firstName = req.name.first;
        var lastName = req.name.last;
        Info.create({
            firstName: firstName,
            lastName: lastName
        },function(err){
            if(err) return next(err);

            res.redirect('/')
        });
    }
};

模型

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/info');

var schema = new mongoose.Schema({
    firstName: String,
    lastName: String
});

module.exports = mongoose.model('info',schema);

app.js

...
app.get('/info',info.form);
app.post('/info',info.submit);
...

5 个答案:

答案 0 :(得分:61)

在Mongo 3.6之前

您可以使用

启动mongodb
mongod --httpinterface

并在

上访问它
http://localhost:28017

从版本2.6开始:MongoDB默认禁用HTTP接口。

<强>更新

  

HTTP接口和REST API

     

MongoDB 3.6删除了已弃用的HTTP接口和REST API   MongoDB的。

请参阅Mongo http interface and rest api

答案 1 :(得分:10)

默认情况下,MongoDB有一个简单的基于Web的管理端口,位于28017。

默认端口27017没有HTTP访问权限(这是错误消息尝试建议的内容)。默认端口用于本机驱动程序访问,而不是HTTP流量。

要访问MongoDB,您需要使用MongoDB native driver for NodeJS之类的驱动程序。你赢了&#34; POST&#34;直接到MongoDB(但您可以使用使用本机驱动程序的express创建RESTful API)。相反,您将使用一个包装库来方便访问MongoDB。您还可以考虑使用Mongoose(使用本机驱动程序),它在NodeJS中为MongoDB添加类似ORM的模型。

如果您无法访问web interface,则可能会被停用。通常情况下,除非您检查日志等,否则我不会指望您进行开发。

答案 2 :(得分:6)

与前面提到的评论一样,消息&#34;看起来您正试图通过本机驱动程序端口上的HTTP访问MongoDB。&#34;这是一个警告,因为你误解了这一行: mongoose.connect(&#39; mongodb的://本地主机/信息&#39); 并浏览此网址: http://localhost:28017/

但是,如果您想查看mongo的管理网页,可以使用此命令执行此操作:

mongod --rest --httpinterface

浏览此网址: http://localhost:28017/

参数httpinterface激活管理网页,参数休息所需的激活页面所需的其他服务

答案 3 :(得分:1)

我在ubuntu 14.04,mongod注册为upstart服务。这篇文章的答案让我朝着正确的方向前进。我必须做的唯一调整是使用upstart服务来编辑/etc/mongod.conf。查找以下行:

# Enable the HTTP interface (Defaults to port 28017).
# httpinterface = true

只需删除httpinterface前面的#并重新启动mongod服务:

sudo restart mongod
  

注意:您还可以通过在上面提到的http接口线正下方添加一条读取rest=true的行来启用其余接口。

答案 4 :(得分:0)

MongoDB的HTTP接口自3.2版以来已弃用:)

检查Mongo文档:HTTP Status Interface