简体   繁体   中英

Not able to connect VueJS and expressJS

So, I have been currently diving into real time apps but not able to even connect the client with the server. I want that for every new tweet being posted ( which is working perfectly with mongodb ) the server emits an event. I read many stackoverflow questions, tried all possible ways of connecting socket.io given there, what I am doing wrong Help would be highly appreciated app.js:

const http = require('http');
const express = require('express');
const app = express();
const server = http.createServer(app);
const path = require('path');
require('./server/db');
const userRouter = require('./server/routers/user');
const tweetRouter = require('./server/routers/tweet');


const cors = require('cors');
const socketIO = require('socket.io');
const io = socketIO(server);

app.set('scoketio',io);
io.on("connection",function(socket){
  console.log("socket connected");
  
});
app.use(userRouter);
app.use(tweetRouter);
server.listen(8081,function(err){
  if(err){
        console.log("some error");
    }
    else {
        console.log("hosted..",err)
    }
})

tweetRouter:

const Tweet = require('../models/tweet');


const bodyParser = require('body-parser');
const TweetRouter = require('express').Router()
TweetRouter.post('/tweet',bodyParser.json(),async (req,res)=>{
    console.log("posting tweet")
   // console.log(io.emit)
   // console.log(req.io);
    var socketio = req.app.get('socketio');
    socketio.on("connection",function(socket){
        console.log("s",socket)
    });
    await Tweet.addTweet(req.body);
    res.send()
});
// other stuff down here , all working fine

tweets.vue

<template>
<div class="loader" v-if="!done">
<b-spinner variant="primary" ></b-spinner>
</div>
     
    <div class="tweet-container" v-else>
       
        <tweet v-for="tweet in tweets" :repli="tweet.reply" :id="tweet._id"  :key="tweet._id" :name="tweet.Name" :image="tweet.profileImage" :text='tweet.text' :likes="tweet.likes" :replies ="tweet.replies" :User="tweet.user"></tweet>
       
    </div>
</template>
<script>
import tweetview from '../components/tweet-view'
import {mapState} from 'vuex'

//import func from '../../vue-temp/vue-editor-bridge';

//import firebase from 'firebase';
//import func from '../../vue-temp/vue-editor-bridge';
export default {
    components:{
        "tweet":tweetview,
        
    },
    computed:mapState(['user','tweets',"done"]),
    sockets:{
        newtweet(){
            console.log("new tweer") // here it is
        }
    },
    created(){
      //  console.log("socket",socket.on("connection"));
      
    }
    
}
</script>

You require cors but never use it.

Try this one:

const cors = require('cors');

app.use(cors());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM