2017-03-27 48 views
0

故事:
我使用2個GET方法創建了一個ExpressJS應用程序。第一個用於渲染index.html,另一個用於返回JSON模擬數據。ExpressJS - 返回不同結果的GET方法

問題:
打開URL上的瀏覽器,將(果然)返回一個JSON虛擬數據,應用程序不斷渲染我的index.html。

依賴關係:
「角度」: 「^ 1.5.8」
「角動畫」: 「^ 1.5.8」
「角詠歎調」: 「^ 1.5.8」
「angular-material」:「^ 1.1.3」
「angular-messages」:「^ 1.5.8」
「angular-sanitize」:「^ 1.5.8」
「angular-ui-router」: 「^ 0.4.2」
「ejs」:「^ 2.5.6」
「express」:「^ 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); 
}); 

我的棱角,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訪問該頁面並從那裏單擊關於。

+0

[與快遞角HTML5模式]的可能的複製(http://stackoverflow.com/questions/31778324/angular-html5-mode-with-express) – Jorg

+0

雖然問題看起來類似於你發佈的那個,我仍然認爲這個問題與不同的接受答案有所不同。作爲我的「其他細節」的一部分,我對你提到的問題提出了答案,但它並不奏效。你可以查看我接受的答案,看看答案各不相同。 –

+0

我也注意到了路由的順序,但是我認爲:當你調用'/ about'時不應該是一個問題,因爲它不會被'/ get-mock-data'抓住。也許我錯了。 – Jorg

回答

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"); 
}); 
+1

永遠不要以爲答案會如此簡單。謝謝@andrerpena –