View main.js
import Vue from 'vue' | |
import App from './App.vue' | |
import VueCompositionApi from '@vue/composition-api' | |
Vue.config.productionTip = false | |
Vue.use(VueCompositionApi) | |
new Vue({ | |
render: h => h(App) |
View main.ts
// ...imports | |
import * as express from 'express'; | |
import { join } from 'path'; | |
async function bootstrap() { | |
const app = await NestFactory.create(AppModule); | |
// serve static assets from the client/dist folder, change this to the correct path for your project | |
app.use(express.static(join(process.cwd(), '../client/dist/'))); | |
View app.module.ts
// ...imports | |
import { MiddlewareConsumer, Module, NestModule, RequestMethod } from '@nestjs/common'; | |
import { ServeHTMLMiddleware } from './app.middleware'; | |
@Module({ | |
// ...module options | |
}) | |
export class AppModule implements NestModule { | |
configure(consumer: MiddlewareConsumer) { | |
consumer |
View app.middleware.ts
import { Injectable, NestMiddleware } from '@nestjs/common'; | |
import { Request, Response } from 'express'; | |
import { join } from 'path'; | |
@Injectable() | |
export class ServeHTMLMiddleware implements NestMiddleware { | |
use(req: Request, res: Response, next: () => void) { | |
// here you can check if the requested path is your api endpoint, if that's the case then we have to return next() | |
if (req.path.includes('graphql')) { | |
return next(); |
View app.controller.ts
import { Controller, Get, Res, Next, Req } from '@nestjs/common'; | |
import { join } from 'path'; | |
import { Response, NextFunction, Request } from 'express'; | |
@Controller() | |
export class AppController { | |
@Get('*') | |
get( | |
@Res() res: Response, | |
@Next() next: NextFunction, |
View index.js
import pollResolvers from './poll.resolvers' | |
export default { | |
Query: { | |
...pollResolvers.queries | |
}, | |
Mutation: { | |
...pollResolvers.mutations | |
}, |
View Polls.vue
<template> | |
<!-- ...html --> | |
</template> | |
<script> | |
// ... code | |
import { OPTION_VOTED, POLL_CREATED } from '@/gql/subscriptions/poll.subscriptions' | |
// ... code |
View poll.subscriptions.js
// ... code | |
export const POLL_CREATED = gql` | |
subscription PollCreated { | |
pollCreated { | |
id | |
title | |
description | |
options { | |
id |
View poll.mutations.js
// ... code | |
export const CREATE_POLL = gql` | |
mutation createPoll($poll: CreatePollInput!) { | |
createPoll(poll: $poll) { | |
id | |
} | |
} | |
`; |
View Polls.vue
<template> | |
<b-container class="my-5"> | |
<b-row> | |
<b-col> | |
<CreatePollModal | |
@createPoll="handleCreatePoll" | |
/> | |
</b-col> | |
</b-row> | |
<b-row class="mt-3" v-if="polls && polls.length"> |
NewerOlder