2016-11-07 64 views
0

作爲MEAN棧的介紹,我在本地的github上做了this示例。這是一個非常基本的聯繫人列表CRUD應用程序,帶有一個表格(或文檔?)。在MEAN棧應用程序中獲取「404 not found」from mongodb

我跟着指導,成功地在我的本地安裝了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" 
} 

,我就蒙戈命令行寫腳本(Windows 7)中:

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

Chrome的控制檯上的錯誤,當我打開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

相關問題