J'ouvre le terminal et saisis les commandes suivantes
Sudo mongod
qui sort ensuite
[initandlisten] waiting for connections on port 27017
J'ouvre un autre terminal et entre
Sudo mongo
qui ouvre le shell mongo et demande des commandes mongo, mais lorsque je vais sur localhost/27017, je reçois le message suivant:
It looks like you are trying to access MongoDB over HTTP on the native driver port.
J'ai créé une application nodejs simple en utilisant express et lorsque je POST
données, il me semble que mongodb se bloque. C'est le message que je reçois dans le terminal dans lequel je lance mon application express et la page ne poste jamais les données. Donc, je crois que le problème réside dans Mongo mais je ne peux pas le comprendre.
POST /info 200 120002ms
Voici mon code express
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('/')
});
}
};
Modèle
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);
...
Avant Mongo 3.6:
Vous pouvez commencer mongodb avec
mongod --httpinterface
Et y accéder sur
http://localhost:28017
Depuis la version 2.6: MongoDB désactive l'interface HTTP par défaut.
Mettre à jour
Interface HTTP et API REST
MongoDB 3.6 supprime l'interface HTTP obsolète et l'API REST vers MongoDB.
MongoDB a un port administratif basé sur le Web simple à 28017 par défaut.
Il n'y a pas d'accès HTTP sur le port par défaut 27017 (c'est ce que le message d'erreur tente de suggérer). Le port par défaut est utilisé pour l'accès au pilote natif, pas pour le trafic HTTP.
Pour accéder à MongoDB, vous devez utiliser un pilote tel que le pilote natif MongoDB pour NodeJS . Vous ne "posterez" pas directement à MongoDB (mais vous pouvez créer une API RESTful en utilisant express qui utilise les pilotes natifs). À la place, vous utiliserez une bibliothèque wrapper qui facilite l'accès à MongoDB. Vous pouvez également envisager d'utiliser Mongoose (qui utilise le pilote natif) qui ajoute un modèle ORM-like pour MongoDB dans NodeJS.
Si vous ne parvenez pas à accéder à l'interface web , celle-ci est peut-être désactivée. Normalement, je ne m'attendrais pas à ce que vous en ayez besoin pour faire du développement, à moins de vérifier les journaux, etc.
Comme dans le commentaire précédent, le message "Il semblerait que vous tentiez d'accéder à MongoDB via HTTP sur le port du pilote natif." c'est un avertissement parce que vous ne comprenez pas cette ligne: mongoose.connect ('mongodb: // localhost/info'); et en parcourant cette URL: http: // localhost: 28017/
Cependant, si vous voulez voir la page Web de l'administrateur du mongo, vous pouvez le faire avec cette commande:
mongod --rest --httpinterface
parcourant cette URL: http: // localhost: 28017/
le paramètre httpinterface active la page Web d'administration et le paramètre reste nécessaire pour activer les services de repos requis par la page
Je suis dans Ubuntu 14.04 et mongod est enregistré en tant que service de départ. Les réponses dans ce post m'ont envoyé dans la bonne direction. La seule adaptation que je devais faire pour que tout fonctionne avec le service upstart était de modifier /etc/mongod.conf
. Recherchez les lignes qui se lisent:
# Enable the HTTP interface (Defaults to port 28017).
# httpinterface = true
Supprimez simplement le #
situé devant l'interface http et redémarrez le service Mongodod:
Sudo restart mongod
Remarque: vous pouvez également activer l'interface de repos en ajoutant une ligne qui se lit
rest=true
juste en dessous de la ligne httpinterface mentionnée ci-dessus.
Interface HTTP pour MongoDB Déconseillé depuis la version 3.2 :)
Vérifier les documents Mongo: Interface d'état HTTP