【发布时间】:2017-11-03 08:21:40
【问题描述】:
我对现代 Web 开发完全陌生,并且一直在通过在线教程学习 MEAN 堆栈。我只是在编写一个允许 CRUD 操作的简单待办事项应用程序。这是使用 MEAN 堆栈(通过 Mongolab 的 Mongo 数据库)和 npm 和 bower 作为包管理器 - 没有脚手架工具或克隆现有应用程序。这是我第一次使用 Node 和 Angular。
我在使用 Angular 显示我的 HTML 页面时遇到了问题。以下是相关文件:
app.js 用于后端(仅包括相关部分):
var express = require('express');
var path = require('path');
var app = express();
var morgan = require('morgan');
var db = require('./db');
var bodyParser = require('body-parser');
app.use(morgan('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({'extended' : 'true'}));
require('./backend/todo_rest')(app);
module.exports = app;
todo_rest.js:
var TodoSchema = require('./todo_schema');
var path = require('path');
module.exports = function(_app) {
_app.get('/api/todos', function(req, res) {
TodoSchema.find({}, function(err, todos) {
console.log('API GET; data: ' + todos);
if(err)
return res.status(500).send("The todos could not be retrieved from the database!");
return res.json(todos);
});
});
_app.get('*', function(req, res){
res.sendFile(path.resolve(__dirname + '/../client/views/index.html'));
});
};
app.js 前端:
var app = angular.module('todosApp', []);
app.controller('todosController', function($scope, $http) {
$scope.todos = {};
$http({
method: 'GET',
url: '/api/todos'
}).then(function (success) {
console.log(success.data);
}, function (error) {
console.log('Angular GET error: ' + error.data);
});
});
和index.html:
<!DOCTYPE html>
<html ng-app="todosApp">
<head>
<meta charset="UTF-8">
<title>Todos App</title>
<script src="../../bower_components/jquery/dist/jquery.min.js"></script>
<script src="../../bower_components/angular/angular.min.js"></script>
<script src="../app.js"></script> // <-- this is the frontend's app.js
</head>
<body ng-controller="todosController">
<div>
<span>Total: {{todos.length}}</span>
<ul ng-repeat="todo in todos">
<li>Name: {{todo.title}}, {{todo.completed}}</li>
</ul>
</div>
</body>
</html>
虽然我确实想支持完整的 CRUD,但现在我只想让 HTML 显示数据库中的所有待办事项。以下是当前的问题:
- 当我通过
localhost:3000启动页面时,我得到了HTML,但像{{todos.length}}这样的Angular 元素按原样显示,而不是被评估值替换。基本上,当我启动该页面时,我希望通过调用我在后端公开的/api/todos端点将所有待办事项显示为列表。我检查了前端app.js中的console.log没有被触发。 - 当我启动
localhost:3000/api/todos时,JSON 结果显示在浏览器中,而不是任何 HTML。我是否需要在 Angular 中使用路由来为同一页面中的每个端点显示不同的视图?
【问题讨论】:
-
您的控制台是否收到
angualr is undefined错误或类似的错误? -
@Pengyy 不,不是那样的。我实际上看到消息表明
标签: javascript angularjs json node.js mean-stack