2016-11-07 65 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

相关问题