2017-01-01 47 views
0

在我server.js文件,我有以下需要加載和JS文件之前顯示HTML文件,express.static不提供HTML文件

var path = require('path'); 
var express = require('express'); 
var app = express(); 
var htmlRoutes = require('./app/routing/routes.js')(app, path, express); 

在我route.js

module.exports = function(app, path, express){ 

    app.use(express.static(__dirname + '/../public')); 

    //also tried doing 
    //app.use('/', express.static(__dirname + '/../public')); 

    app.listen(10003, function(){ 
     console.log('connected on 10003') 
    }) 
} 

我不知道爲什麼我一直在瀏覽器上收到'無法獲取/'信息。我的目錄佈局如下

dir main 
    -server.js 
    dir subMain 
     dir routing 
     -routes.js 
     dir public 
     -home.html 
     -list.html 

我所試圖做的是,當我運行「節點server.js」,我想加載和routes.js文件之前顯示home.html的頁面。這是因爲我需要加載文檔,以便我可以使用jquery選擇器'$'並在home.html中選擇一個按鈕類,併爲其指定一個單擊事件,以便對'/ list'進行AJAX調用以顯示list.html 。

我也想這樣做

module.exports = function(app, path, express){ 

    app.use(express.static(__dirname + '/../..')); 

    app.use(function(request, response, next){ 
     response.sendFile(path.resolve(__dirname + '/../public/home.html')); 
    }) 

    app.listen(10003, function(){ 
     console.log('connected on 10003') 
    }) 
} 

但我得到以下錯誤

Uncaught SyntaxError: Unexpected token <

我使用的express.static

module.exports = function(app, path, express){ 
    //loading the directory with the home.html 
    app.use(express.static(path.join(__dirname + '..', 'public'))); 
    //loading directory with server.js by going up two level, from routing directory -> app -> main (has server.js) 
    app.use(express.static(path.join(__dirname + '..', '..'))) 

    app.listen(10003, function(){ 
     console.log('connected on 10003') 
    }) 
} 


//Edit, added jquery event handler for button click on home.html 
$(document).on('click', '.btn', sendSurvery); 

    function sendSurvery(){ 

     var myQueryUrl = "http://localhost:10003/survey"; 

     $.ajax({url: myQueryUrl, method: 'GET'}).done(function(response){ 

     }); 
    } 

多行文本也試過,但我仍然得到消息不能GET /。我需要首先顯示home.html,以便在那裏加載jquery庫,所以我可以選擇按鈕併發送survey.html點擊事件 我忘記了我的目錄public和routing在子文件夾中,名爲subMain

回答

0

試試這個

你的服務器上的文件應該是這樣的

var path = require('path'); 
var express = require('express'); 
var app = express(); 

require('./subMain/routing')(app, path, express); 
    app.listen(9000, function(){ 
     console.log('connected on 9000') 
    }) 

也改變了你的routes.js到index.js的名稱。將其保存在路由文件夾中(不要更改名稱)。下面的代碼應該在那裏。我也改變了你的端口號。不應該那麼高。

 module.exports = function(app, path, express){ 
    app.use(express.static(__dirname + "/public")); 
    app.use(function(request, response, next){ 
     response.sendFile(process.cwd() + "/subMain/public/home.html"); 
    }) 
} 

我已經發布了一切在github回購,所以你可以看到文件結構。

https://github.com/eliezerwohl/stackoverflowAnon

+0

我需要使用'app.use'來提供html文件。用你這樣做的方式,我不能擺脫第1行,只使用app.get? app.use在第一行上做了什麼? – henhen

+0

@Anonymous我改變了我的代碼以更好地匹配你的代碼。至於我的第一行代碼https://expressjs.com/en/starter/static-files.html –

+0

如果你把你的route.js代碼放到你的服務器上,我會得到一個修改後的代碼 – henhen