首先我的檔案結構:
web
-public
--login.html(登陸頁面屬於靜態頁面)
-veiws
--index.jade
- routes
--index.js
-app.js
前端程式碼
$("#login").click(function(){
var username=$('#un').val();
var pw=$("#pw").val();
var data = {"un":username,"pw":pw};
$.ajax({
type:"post",
url:"/login",
async:true,
success: function(data,status){
if(status == 'success'){
location.href = '../views/index.jade';
}
},
error: function(data,status){
if(status == 'error'){
alert("密码或者用户名错误");
}
});
})
這個$.ajax裡的url我到底該寫什麼。
另外我的服務端程式碼是寫在app.js裡還是寫在router資料夾下的index.js裡。還是新建一個js檔案並把服務端程式碼寫進去,然後url寫這個js檔案的相對目錄(php看起來就是這樣)。
還有就是index.js裡的router.get('/', function(req, res, next){} )和
app.js裡的var router = require('./routes/index ');app.use('/',router)有什麼差別,到底哪個才是綁定網域。我的理解是伺服器啟動後自動運行app.js然後app.use相當於把函數壓入一個stack依次執行,然後執行到index.js時,index.js根據url位址渲染views裡的jade模板,並且每刷新一次重新渲染一次(不清楚是沒刷新一次app.js重新執行一次還是index.js重新執行一次)。
你可以試試在 segmentFault 的 控制台那裡輸入下面的程式碼
然後你會拿到 / 這個 html 的檔案內容。
你的問題
假設你監聽了 3000 端口,而且你定義了 /login 這個路由
那麼 URL 應該要填 /login
這個 app.use 後面的內容叫做中間件
例如我訪問 http://localhost:3000/api/login
剛好我有個中間件剛好可以配對到 /api/login 那麼 express 會把 req res 交給這個中間件做處理
URL 可以是相對的也可以是絕對的,絕對的從
http(s)://
開始,可以指定任何網域上的URL,不過要注意跨網域存取的問題。相對的則是相對於目前頁面的 URL,/<path>
/
開始的相對路徑,相對於根,即目前頁面所在的 Domain(主機網域)../<path>
../
連用表示上面若干層./
./
是相同的效果這裡要注意的是當前頁面路徑的認定,因為URL中
folder/
有可簡寫成folder
,而有沒有folder/
有可简写成folder
,而有没有/
所代表的位置完全不同(在當今路由廣泛使用的情況下,已經不是透過擴展名來區分目錄或頁面了),所以一般建議前端至少寫相對於根的路徑。你寫'/'是代表目前埠,url是你在nodejs中的路徑