【发布时间】:2016-12-11 06:54:19
【问题描述】:
我对 AngularJS 和 NodeJS 都很陌生。我试图让一个基本的应用程序在页面加载时运行,它将发出一个返回客户 JSON 结构的 GET 调用,然后 HTML 页面将使用 AngularJS 将该 JSON 结构显示到一个表中。
我可以在我的server.js 中加载我的 HTML:
app.get('/', function(req, res) {
res.sendFile(path.join(__dirname + '/../frontend/app/partials/index.html'));
});
我可以在我的server.js 中进行 GET 调用以在页面加载时检索我的 JSON 数据:
app.get('/', function(req, res) {
fs.readFile('./testData.json', 'utf8', function(err, data) {
res.send(data);
});
});
我想将这两者结合起来,以便 GET 调用返回,然后 HTML 使用该数据。我该怎么做?
我还在 angular.js 的浏览器中收到 404 错误。我把路径放在我的index.html 中,就像我的所有其他 JS 文件一样。我在app.use 中有它在我的server.js 中。我的其他 JS 文件和我的 CSS 文件可以找到,但不是 angular.js。有谁知道为什么会这样?这是错误
这是我的完整代码:
Server.js:
var path = require('path');
var express = require('express');
var fs = require('fs');
var app = express();
// angular.js gets 404 in browser -- why?
app.use(express.static(path.join(__dirname, '../frontend/bower_components/angular')));
// These files load fine (SimpleController.js, main.css)
app.use(express.static(path.join(__dirname, '../frontend/app')));
// This will load the HTML page
app.get('/', function(req, res) {
res.sendFile(path.join(__dirname + '/../frontend/app/partials/index.html'));
});
// This will return JSON data -- How to combine this with the above GET?
app.get('/', function (req, res) {
fs.readFile('./testData.json', 'utf8', function(err, data) {
if(err) {
return console.log(err);
}
res.send(data);
});
});
var server = app.listen(8081, function() {
var port = server.address().port;
console.log("Server listening on port ", port);
});
SimpleController.js:
var app = angular.module('app', ['']);
app.controller('SimpleController', function ($scope, $http) {
$http.get('/').then(function (response) {
$scope.customers = response.data;
});
});
index.html:
<!DOCTYPE html>
<html ng-app="app">
<head>
<title>CUSTOMERS</title>
<link rel="stylesheet" type="text/css" href="../main.css">
</head>
<body>
<h1> CUSTOMERS </h1>
<div ng-controller="SimpleController">
<form>
<label>First Name:</label>
<input type="text" /> <br />
<label>Last Name:</label>
<input type="text" /> <br />
<label>Age:</label>
<input type="text" /> <br />
<label>Street:</label>
<input type="text" /> <br />
<label>City:</label>
<input type="text" /> <br />
<label>State:</label>
<input type="text" /> <br />
<label>Zip:</label>
<input type="text" /> <br />
<input type="submit" value="Add Customer" />
</form>
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
<table id="customers">
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
<th>Street</th>
<th>City</th>
<th>State</th>
<th>Zip</th>
</tr>
<tr ng-repeat="cust in customers">
<td> {{ cust.firstName }} </td>
<td> {{ cust.lastName }} </td>
<td> {{ cust.age }} </td>
<td> {{ cust.address.street }} </td>
<td> {{ cust.address.city }} </td>
<td> {{ cust.address.state }} </td>
<td> {{ cust.address.zip }} </td>
</tr>
</table>
</div>
<!-- angular.js gets 404 in browser -->
<script src="../../bower_components/angular/angular.js"></script>
<!-- this loads fine -->
<script src="../SimpleController.js"></script>
</body>
</html>
更新:
所以不知何故,我的 index.html 找不到 angular.js 文件。我将 angular.js 文件从 /src/frontend/bower_components/angular/ 移动到 /src/frontend/app 以及我的其余 javascript 文件。我的 index.html 位于'/src/frontend/app/partials/。我按照 suzo 建议的方法执行了此操作,即创建一个 '/' 路由和 '/data' 路由,然后在我的控制器中调用 '/data'。
所以我的下一个问题是……为什么 index.html 不能在 /bower_components 目录中读取 angular.js,但它可以在 /app 目录中正常读取?
【问题讨论】:
-
看起来你有两条相同的路由'/',将getData路由更改为'/data'或其他东西。
标签: javascript html angularjs node.js