Szabó Martin oldala

Backend ZH helper

Linkek

Package install guide

# Sequalize
$ npm install sequelize sequelize-cli

# Feathers
$ npm install @feathersjs/feathers @feathersjs/cli 

# sqlite3
$ npm install sqlite3 

# Apollo server*
$ npm install apollo-server 

# Axios
$ npm install axios 

# Nodemon
$ npm install --save-dev nodemon 

Guides

Websocket server

server.js

const app = require('http').createServer(handler)
const io = require('socket.io')(app);
const fs = require('fs');

app.listen(8000);

function handler(req, res) {
    const fileName = (req.url.includes(".js")) ? (__dirname + '/client.js') : (__dirname + '/index.html');
    console.log(fileName);
    fs.readFile(fileName,
        (err, data) => {
            if (err) {
                res.writeHead(500);
                return res.end('Error loading index.html');
            }

            res.writeHead(200);
            res.end(data);
        });
}

io.on('connection',(socket) => {

    console.log(`User with ${socket.id} has been connected.`);
    socket.on('disconnect',(socket)=>{
        console.log(`User with ${socket.id} has been disconnected.`);
    });
});

client.js

const socket = io('http://localhost:8000');

socket.on(...)

index.html

<html>
    <head>
        <title>CLIENT</title>
    </head>

    <body>
        <h1>Client</h1>
    </body>
    <script src="/socket.io/socket.io.js"></script>
    <script src="/client.js"></script>
</html>

Apollo server & GraphQL

server.js

const { ApolloServer , gql } = require('apollo-server');
// const models = require('./models'); // for Sequalize 
const axios = require('axios').default;

// Example axios fetch
const getItems = async (pageCap = 10000, page = 1) => {
    const response = await axios.get(`https://diakkedvezmeny.com/items?pageCapacity=${pageCap}&page=${page}`);
    return response.data.result;
}

const schema = gql`
    type Query {
        greeting(name: String): String
    }

`

const resolvers = {
    Query: {
        greeting: (parent, {name}) => `Hello ${name}`,

    }
}


async function run() {
    // await models.sequelize.sync(); // optional
    const server = new ApolloServer({
        typeDefs: schema,
        resolvers

// If you want db
        // context: {
        //     tracks: models.Track,
        //     projects: models.Project,
        //     users: models.User,
        //     filters: models.Filter
        // }
    });
    server.listen().then(r => console.log("OK Server is running"));

}
run();

Commandss

# Sequalize generate model
$ npx sequalize generate:model --name dogs --attributes name:string 

# Feathers
$ npx feathers init
$ npx feathers generate service

# Sequalize
$ npx sequalize init
$ npx sequalize model:generate
$ npx sequelize migration:generate

Relationships

Sequalize

...
// eslint-disable-next-line no-unused-vars
  dogs.associate = function (models) {
    // Define associations here
    // See http://docs.sequelizejs.com/en/latest/docs/associations/
    dogs.belongsTo(models.users); // <-- Belongs to ONE user
    dogs.hasMany(models.puppy); // <-- 1 Dog can have many puppy
    dogs.belongsToMany(models.toys, {through: 'dogs_toys'}); // <-- Many to Many a dogs_toys táblával
  };

  return dogs;
...