2016-11-07 12 views
0

MEANスタックの紹介として、私はローカルでgithubのthisの例を実行していました。これは非常に基本的なコンタクトリストCRUDアプリケーションであり、単一のテーブル(またはドキュメント?)を持ちます。平均スタックアプリケーション内でmongodbから "404 not found"を取得する

ガイドに従って、自分のローカルにmongodbを正常にインストールしました。

server.js:

var express = require('express'); 
var app = express(); 
var mongojs = require('mongojs'); 
var db = mongojs('contactlist', ['contactlist']); 
var bodyParser = require('body-parser'); 

app.use(express.static(__dirname + '/public')); 
app.use(bodyParser.json()); 

app.get('/contactlist', function (req, res) { 
    console.log('I received a GET request'); 

    db.contactlist.find(function (err, docs) { 
    console.log(docs); 
    res.json(docs); 
    }); 
}); 

app.post('/contactlist', function (req, res) { 
    console.log(req.body); 
    db.contactlist.insert(req.body, function(err, doc) { 
    res.json(doc); 
    }); 
}); 

app.delete('/contactlist/:id', function (req, res) { 
    var id = req.params.id; 
    console.log(id); 
    db.contactlist.remove({_id: mongojs.ObjectId(id)}, function (err, doc) { 
    res.json(doc); 
    }); 
}); 

app.get('/contactlist/:id', function (req, res) { 
    var id = req.params.id; 
    console.log(id); 
    db.contactlist.findOne({_id: mongojs.ObjectId(id)}, function (err, doc) { 
    res.json(doc); 
    }); 
}); 

app.put('/contactlist/:id', function (req, res) { 
    var id = req.params.id; 
    console.log(req.body.name); 
    db.contactlist.findAndModify({ 
    query: {_id: mongojs.ObjectId(id)}, 
    update: {$set: {name: req.body.name, email: req.body.email, number: req.body.number}}, 
    new: true}, function (err, doc) { 
     res.json(doc); 
    } 
); 
}); 

app.listen(3000); 
console.log("Server running on port 3000"); 

公開/コントローラ/ controller.js:

var myApp = angular.module('myApp', []); 
myApp.controller('AppCtrl', ['$scope', '$http', function($scope, $http) { 
    console.log("Hello World from controller"); 


var refresh = function() { 
    $http.get('/contactlist').success(function(response) { 
    console.log("I got the data I requested"); 
    $scope.contactlist = response; 
    $scope.contact = ""; 
    }); 
}; 

refresh(); 

$scope.addContact = function() { 
    console.log($scope.contact); 
    $http.post('/contactlist', $scope.contact).success(function(response) { 
    console.log(response); 
    refresh(); 
    }); 
}; 

$scope.remove = function(id) { 
    console.log(id); 
    $http.delete('/contactlist/' + id).success(function(response) { 
    refresh(); 
    }); 
}; 

$scope.edit = function(id) { 
    console.log(id); 
    $http.get('/contactlist/' + id).success(function(response) { 
    $scope.contact = response; 
    }); 
}; 

$scope.update = function() { 
    console.log($scope.contact._id); 
    $http.put('/contactlist/' + $scope.contact._id, $scope.contact).success(function(response) { 
    refresh(); 
    }) 
}; 

$scope.deselect = function() { 
    $scope.contact = ""; 
} 

}]); 

公共/ index.htmlを:

<!DOCTYPE> 
<html ng-app="myApp"> 
<head> 
<!-- Latest compiled and minified CSS --> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css"> 

<!-- Optional theme --> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap-theme.min.css"> 

    <title>Contact List App</title> 
</head> 
<body> 
    <div class="container" ng-controller="AppCtrl"> 
    <h1>Contact List App</h1> 

    <table class="table"> 
     <thead> 
     <tr> 
      <th>Name</th>   
      <th>Email</th> 
      <th>Number</th> 
      <th>Action</th> 
      <th>&nbsp;</th> 
     </tr> 
     </thead> 
     <tbody> 
     <tr> 
      <td><input class="form-control" ng-model="contact.name"></td> 
      <td><input class="form-control" ng-model="contact.email"></td> 
      <td><input class="form-control" ng-model="contact.number"></td> 
      <td><button class="btn btn-primary" ng-click="addContact()">Add Contact</button></td> 
      <td><button class="btn btn-info" ng-click="update()">Update</button>&nbsp;&nbsp;<button class="btn btn-info" ng-click="deselect()">Clear</button></td> 
     </tr> 
     <tr ng-repeat="contact in contactlist"> 
      <td>{{contact.name}}</td> 
      <td>{{contact.email}}</td> 
      <td>{{contact.number}}</td> 
      <td><button class="btn btn-danger" ng-click="remove(contact._id)">Remove</button></td> 
      <td><button class="btn btn-warning" ng-click="edit(contact._id)">Edit</button></td> 
     </tr> 
     </tbody> 
    </table> 

    </div> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.12/angular.min.js"></script> 
<script src="controllers/controller.js"></script> 
</body> 
</html> 

package.json:

{ 
    "name": "contactlistapp", 
    "version": "1.0.0", 
    "description": "", 
    "main": "server.js", 
    "dependencies": { 
    "body-parser": "^1.10.2", 
    "express": "^4.11.1", 
    "mongojs": "^0.18.1" 
    }, 
    "devDependencies": {}, 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1", 
    "start": "node server.js" 
    }, 
    "repository": { 
    "type": "git", 
    "url": "https://github.com/michaelcheng429/meanstacktutorial.git" 
    }, 
    "author": "", 
    "license": "ISC", 
    "bugs": { 
    "url": "https://github.com/michaelcheng429/meanstacktutorial/issues" 
    }, 
    "homepage": "https://github.com/michaelcheng429/meanstacktutorial" 
} 
0私はMongoのコマンドライン上で書いたの

スクリプト(Windows 7の):

use contactlist 
db.contactlist.insert({name: 'Tom', email: '[email protected]', number: '(444)444-4444'}) 

クロームコンソール上のエラー私はindex.htmlを開きます。

GET http://localhost:63342/contactlist 404 (Not Found)(anonymous function) @ angular.js:9827m @ angular.js:9628f @ angular.js:9344(anonymous function) @ angular.js:13189$eval @ angular.js:14401$digest @ angular.js:14217$apply @ angular.js:14506(anonymous function) @ angular.js:1448e @ angular.js:4185d @ angular.js:1446sc @ angular.js:1466Jd @ angular.js:1360(anonymous function) @ angular.js:26125a @ angular.js:2744c @ angular.js:3014 
controller.js:19 Object {name: "sa", email: "sa", number: "as"}email: "sa"name: "sa"number: "as"__proto__: Object 
+0

'contactList' =' contactlist' – str

+0

@str申し訳ありませんが、それを変更するのを忘れて、ポストを編集しました。これは以前のエラーメッセージでした。 – brainmassage

+0

http:// localhost:63342/contactlist、あなたのアプリケーションをポート3000で実行している場合 – krakig

答えて

1

あなたの角度アプリはによって提供されていませんあなたのnode.jsサーバーは、$http.get('/contactlist')に電話をかけたときに、角度アプリで同じドメインのルートを呼び出していることを意味します(localhost:63342)。

あなたがリクエストでドメインを追加していることを修正できます! $http.get('localhost:3000/contactlist')

+0

CORSエラー – brainmassage

+0

を取得しました。別のドメインからルートが呼び出されたためです。 CORSを許可するには、このスレッドを見てください:http://stackoverflow.com/questions/7067966/how-to-allow-cors-in-express-node-js – krakig

関連する問題