我正在尝试部署网站但是当我尝试登录时,我总是会得到“无效的点”'我创造了。在我的计算机上运行它时,应用程序非常完美。在我实现socket.io之前它曾经完美地工作,所以我可能会在我的前端弄乱一些东西。
这是我的 app.js 代码:
const express = require('express');
const app = express();
const path = require('path');
const bodyParser = require('body-parser');
const cors = require('cors');
const passport = require('passport');
const AWS = require('aws-sdk');
var dynamoose = require('dynamoose');
var awsIot = require('aws-iot-device-sdk');
const client = require('socket.io').listen(8080).sockets;
dynamoose.AWS.config.update({
PRIVATE INFO
});
const users = require('./routes/users');
const info = require('./routes/info');
app.use(cors({credentials: true, origin: 'http://localhost:4200'}));
// Static folder
app.use(express.static(path.join(__dirname, 'public')));
// Body parser middleware
app.use(bodyParser.json());
app.use(passport.initialize());
app.use(passport.session());
require('./config/passport')(passport);
app.use('/users', users);
app.use('/info', info)
app.get('/', (req, res) => {
res.send("Invalid endpoint");
});
const port = process.env.PORT || 8888;
const host = '0.0.0.0';
app.listen(port, host, () => {
console.log("Server listening on: " + port)
});
// Device IoT
var device = awsIot.device({
PRIVATE CONFIG, SORRY
});
device
.on('connect', function() {
console.log('Works');
device.subscribe('PRIVATE-BUT-WORKING');
});
client.on('connection', function(socket){
device.on('message', function(topic, payload) {
socket.emit('output', payload.toString());
});
});
这是我在套接字中使用的服务:
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
import { Observable } from 'rxjs/Observable';
import * as io from 'socket.io-client';
@Injectable()
export class SocketIOService {
private url = 'http://localhost:8080';
private socket;
getMessages() {
let observable = new Observable(observer => {
this.socket = io(this.url);
this.socket.on('message', (data) => {
observer.next(data);
});
return () => {
this.socket.disconnect();
};
})
return observable;
}
}
我尝试了一些我在这里找到但没有任何反应的解决方案
答案 0 :(得分:0)
你有两个问题。最严重的一个是你尝试通过与快递应用程序不同的端口提供websockets。 Heroku只为web dyno打开一个端口。所以你需要在服务器端做这样的事情(改编自socket.io)docs:
const port = process.env.PORT || 8888;
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(port);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
从那里你可以编辑你的客户端以击中正确的服务器(这应该在本地和远程工作)。您应该能够构造没有任何参数的套接字客户端(这将告诉它连接到源):
this.socket = io();
您的角色设置可能还有问题。
app.use(cors({credentials: true, origin: 'http://localhost:4200'}));
这个起源是否会发挥作用?但也许你可以解决修复这些其他问题后导致的任何问题。