ExpressJS - GET方法返回不同的结果

时间:2017-03-27 00:14:19

标签: angularjs express angular-ui-router

故事:
我用2个GET方法创建了一个ExpressJS应用程序。第一个用于呈现index.html,另一个用于返回JSON模拟数据。

问题:
在浏览器上打开URL(预期会返回JSON模拟数据),应用程序继续呈现我的index.html。

依赖关系:
    “棱角分明”:“^ 1.5.8”
    “棱角动画”:“^ 1.5.8”
    “棱角咏叹调”:“^ 1.5.8”
    “棱角材料”:“^ 1.1.3”
    “angular-messages”:“^ 1.5.8”
    “棱角消毒”:“^ 1.5.8”
    “angular-ui-router”:“^ 0.4.2”
    “ejs”:“^ 2.5.6”
    “表达”:“^ 4.15.2”

代码:

app.js

var express = require("express");
var app = express();
var port = 3000;

app.engine(".html", require("ejs").__express);
app.set("views", __dirname + "/views");
app.set("view engine", "html");
app.use(express.static(__dirname));

app.get("*", function(request, response) {
        response.render("index");
});

app.get(“/get-mock-data”, function(request, response) {
    var mockData = {
        “name” : “Michael Ardan”,
        “gender” : “M”,
        “birthday” : “2017-01-01”,
        “other_details” : “chubby”
    };
    response.send(mockData);
});

app.listen(port, function() {
        console.log("Listening on port " + port);
});

my-angular-app.js

angular.module(“TestApp” , [
    "ui.router",
    "ngMaterial"
])

.config(function($locationProvider){
    $locationProvider.html5Mode(true);
})

.config(function($stateProvider, $urlRouterProvider){

    var homeState = {
        "name" : "home",
        "url" : "/home",
        "templateUrl" : "views/home.html"
    };

    var aboutState = {
        "name" : "about",
        "url" : "/about",
        "templateUrl" : "views/about.html"
        “controller” : “AboutController”
    };

    $urlRouterProvider.otherwise("/home");
    $stateProvider.state(homeState);
    $stateProvider.state(aboutState);
});

其他详情:
- 我试图改变

app.get("*", function(request, response) {
        response.render("index");
});

app.get("/", function(request, response) {
        response.render("index");
});

虽然这适用于我,但我无法直接在浏览器上访问http://localhost:3000/about。相反,服务器继续返回“无法获取/关于”。我必须从http://localhost:3000访问该页面,然后从那里单击“关于”。

2 个答案:

答案 0 :(得分:1)

实际上,我没有足够的知识直接解释它,但您的GET请求应该发送到index.html,而不是Express应用程序。一切都与Html5Mode有关。

您的问题也有相同的案例和解决方案:How to use AngularJS routes with Express (Node.js) when a new page is requested?

答案 1 :(得分:1)

Express将呈现与您的“查询”匹配的第一条路线。您在模拟数据之前使用默认/全部路径 。切换订单,一切都会正常工作。

这样做:

app.get(“/get-mock-data”, function(request, response) {
    var mockData = {
        “name” : “Michael Ardan”,
        “gender” : “M”,
        “birthday” : “2017-01-01”,
        “other_details” : “chubby”
    };
    response.send(mockData);
});

app.get("*", function(request, response) {
        response.render("index");
});