2017-09-26 72 views
1

我有一個在featherjs中製作的應用程序,我想用https運行。我已經得到了那個工作。我通過將'index.js'文件更改爲如下所示:feathersjs - > socketio https請求不起作用

const fs = require('fs'); 
const https = require('https'); 
const app = require('./app'); 
const port = app.get('port'); 
const host = app.get('host'); 
//const server = app.listen(port); 
const server = https.createServer({ 
    key: fs.readFileSync('./certs/aex007.key'), 
    cert: fs.readFileSync('./certs/aex007.crt') 
}, app).listen(port, function(){ 
    console.log("Mfp Backend started: https://" + host + ":" + port); 
}); 

只要我現在去例如郵遞員'https://127.0.0.1/a_service_name',我接受證書後得到結果。當我在瀏覽器中訪問該地址時,也會給出結果,證書指示爲「紅色」,因爲它是自簽名的。

所以我的問題是以下。當我在瀏覽器中訪問'http://127.0.01'時,而不是'index.html'文件,我沒有收到我的'套接字'信息,只有一個空白頁。我得到以下錯誤控制檯

信息:(404)路線:/socket.io/?EIO=3 &運輸=輪詢& T = LwydYAw - 沒有找到 頁

然後「的index.html」文件我用目前包含此:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script> 
<script type="text/javascript" src="//cdn.rawgit.com/feathersjs/feathers-client/v1.1.0/dist/feathers.js"></script> 
<script type="text/javascript"> 
    var socket = io('https://127.0.0.1:3001'); 
    var client = feathers() 
     .configure(feathers.hooks()) 
     .configure(feathers.socketio(socket)); 
    var todoService = client.service('/some_service'); 

    todoService.on('created', function(todo) { 
     alert('created'); 
     console.log('Someone created a todo', todo); 
    }); 

</script> 

有人能向我解釋怎樣做才能得到警告信息?

編輯2017年9月27日 我發現socket.io配置像

var https = require('https'),  
    fs = require('fs');   

var options = { 
    key: fs.readFileSync('ssl/server.key'), 
    cert: fs.readFileSync('ssl/server.crt'), 
    ca:  fs.readFileSync('ssl/ca.crt') 
}; 
var app = https.createServer(options); 
io = require('socket.io').listen(app);  //socket.io server listens to https connections 
app.listen(8895, "0.0.0.0"); 

在互聯網上。然而需要feathers-socket.io在app.js不是index.js 。我想知道我能否改變這一點?

回答

3

由於daffl指出feathers slack channelhere; check out the documentation除了https portion of the docs之外,在致電configure之前明確要求feathers-socketio。把那兩個在一起,我會做這樣的事情(未經測試):

const feathers = require('feathers'); 
const socketio = require('feathers-socketio'); 
const fs = require('fs'); 
const https = require('https'); 


const app = feathers(); 
app.configure(socketio()); 

const opts = { 
    key: fs.readFileSync('privatekey.pem'), 
    cert: fs.readFileSync('certificate.pem') 
}; 

const server = https.createServer(opts, app).listen(443); 

// magic sauce! Socket w/ ssl 
app.setup(server); 

app.jsindex.js的結構是完全取決於你。你可以像上圖一樣在單個文件中完成上述所有操作,或者將https/fs需求分成index.js,並將應用程序配置到app.js中 - 我會推薦這種方法,因爲它可以讓你更改(通常更小)index.js文件,如果你每個決定使用像nginx這樣的反向代理來處理ssl而不是節點。

+1

THanks。我試過這個,它的工作原理。我忽略了最後一行......接下來將在nuxtjs的客戶端應用上實現https,但那是另一回事。 – Edgar