Nuxt와 FaunaDB를 사용하여 멋진 간단한 연락처 페이지를 만드는 방법
본고에서, 당신은 어떻게 연락처 사이트와 연락처를 구축하는지 알게 될 것입니다...
First, we'll build a simple page and in it how to contact us like , , Github...
Nuxtjs 회사
Nuxt는 Vue 위에 구축된 소스 웹 응용 프로그램 프레임워크입니다.js, SSR 기능으로 유명하지만 정적일 수도 있습니다.
우리는 노드 서버가 모든 클라이언트의 요청을 처리하고 최종적으로 API나 데이터베이스에서 데이터를 얻는 것이 아니라 정적 사이트 생성기로 Nuxt를 사용할 것이다.
FaunaDB 회사
Fauna는 전 세계에 분포된 저지연 데이터베이스로 본 기기의 GraphQL 지원을 가지고 일관성과 안전성을 약속합니다.
As a serverless database, FaunaDB allows applications to access data through a secure API, in contrast to more "traditional" relational databases that require you to open a connection. In that sense, FaunaDB is “connectionless” and rather behaves like an API, which fits perfectly in a Jamstack architecture. There is also no need to host and manage our own database. It requires zero server configuration and supports seamless scalability out-of-the-box.
프레젠테이션
you can try the project (demo)
예비 지식
계속하기 전에 다음이 필요합니다.
가자
우선 설치가 필요합니다
create-nuxt-app
$ npm i -g create-nuxt-app
설치 후 웹 사이트를 만듭니다$ create-nuxt-app PROJ_NAME && cd PROJ_NAME
now we need three packages :
$ npm i faunadb slugify dotenv
이제 graphql 모드를 만듭니다.$ mkdir graphql && cd graphql && touch schema.gql
데이터 수정 (graphql 모드)
구조:
fab
인지 fas
인지 확인schema.gql
type Repo {
desc: String! @unique
repoUrl: String! @unique
# if font-awesome icon is brand or solid
brand: Boolean
solid: Boolean
faI: String
# this only for twitter & dev contacts
hashtag: Boolean
hashtag_name: String
}
type Query {
allRepos: [Repo!]!
}
faunaDB dashboard &createnew database
로 이동합니다.graphql 부분으로 이동하여 모드 가져오기
now you should have collections
키 포인트 만들기
생성
Admin key
& Server key
ADMIN
누르기
SAVE
프로젝트에서 파일 만들기 .env
대신🔑️ 너의 열쇠로
SERVER
동시에 누르기
SAVE
in.env
대신🗝️ 너의 두 번째 열쇠로
ok we finish all this
graphql
폴더로 돌아가서 만들기db-connection.js
$ touch db-connection.js
안에 이 코드를 붙여넣다require("dotenv").config();
const faunadb = require("faunadb");
const query = faunadb.query;
function createClient() {
if (!process.env.FAUNA_ADMIN_KEY) {
throw new Error("FAUNA_ADMIN_KEY not found");
}
const client = new faunadb.Client({
secret: process.env.FAUNA_ADMIN_KEY
});
return client;
}
exports.client = createClient();
exports.query = query;
아주 중요한 걸음이에요.
in
nuxt.config.js
in 이상require("dotenv").config();
게다가 generate
아이템generate: {
async routes() {
const faunadb = require("faunadb");
const query = faunadb.query;
const slugify = require("slugify");
const q = query;
if (!process.env.FAUNA_SERVER_KEY) {
throw new Error("FAUNA_SERVER_KEY not found.");
}
const client = new faunadb.Client({
secret: process.env.FAUNA_SERVER_KEY
});
const result = await client.query(
q.Map(
q.Paginate(q.Match(q.Index("allRepos"))),
q.Lambda("X", q.Get(q.Var("X")))
)
);
const repos = result.data.map(repo => repo.data);
const routes = repos.map(repo => {
const repoUrlParts = repo.repoUrl.split("/");
const repoOwner = repoUrlParts[repoUrlParts.length - 2];
const repoName = repoUrlParts[repoUrlParts.length - 1];
const slug = slugify(repoName, {
remove: /[*+~.()'"!:@]/g
});
repo.slug = slug;
repo.owner = repoOwner;
repo.name = repoName;
return {
payload: repo
};
});
routes.push({
route: "/",
payload: repos
});
return routes;
}
}
컬렉션 가져오기
faunaDB 대시보드의 모음 섹션으로 돌아가 새 모음을 만듭니다.
누르기
new document
예제 데이터{
"desc": "you can make a github issue",
"repoUrl": "https://github.com/YOUR_REPO/issues",
"brand": true,
"solid": false,
"faI": "github",
"hashtag": false
}
dev-x 트위터, GitHub 질문, dev-org지금 이동
pages
시작하기 전에 소프트웨어 패키지가 필요합니다.$ npm i @fortawesome/fontawesome-svg-core @fortawesome/vue-fontawesome @fortawesome/free-brands-svg-icons @fortawesome/free-solid-svg-icons sass sass-loader
현재 섹션 nuxt.config.js
으로 이동 css
저희가 글씨체가 좋은 스타일을 가져올 거예요.이것을 입력하십시오.
css: [
"@fortawesome/fontawesome-svg-core/styles.css",
...
],
이동 pages
및 생성 index.scss
pages
에는 두 개의 파일이 있어야 합니다.├── index.vue
└── index.scss
inindex.vue
template
<template>
<div class="container">
<div>
<Logo />
<h1 class="title">contact.dev-x</h1>
<div>
<div class="card">
<h3>Contacts →</h3>
<ul v-for="repo in repos" :key="repo.desc">
<li>
{{ repo.desc }}
<strong v-if="repo.hashtag">{{ repo.hashtag_name }}</strong>
<a :href="repo.repoUrl">
<a class="btn">
<fai v-if="repo.brand" :icon="['fab', `${repo.faI}`]" />
<fai v-if="repo.solid" :icon="repo.faI" />
</a>
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</template>
script
<script>
import Vue from "vue";
import { library, config } from "@fortawesome/fontawesome-svg-core";
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
import { fab } from "@fortawesome/free-brands-svg-icons";
import { fas } from "@fortawesome/free-solid-svg-icons";
// This is important, we are going to let Nuxt.js worry about the CSS
config.autoAddCss = false;
// You can add your icons directly in this plugin. See other examples for how you
// can add other styles or just individual icons.
library.add(fab);
library.add(fas);
// Register the component globally
Vue.component("fai", FontAwesomeIcon);
Vue.config.productionTip = false;
export default {
asyncData({ payload }) {
return { repos: payload };
}
};
</script>
style
<style lang="scss">
@import "index.scss";
</style>
index.scss
$color: #121312;
.container {
margin: 0 auto;
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
}
.title {
display: block;
font-weight: 300;
font-size: 100px;
color: #31465e;
letter-spacing: 1px;
}
.subtitle {
font-weight: 300;
font-size: 42px;
color: #526488;
word-spacing: 5px;
padding-bottom: 15px;
}
.links {
padding-top: 15px;
}
.card {
cursor: pointer;
margin: 1rem;
flex-basis: 45%;
padding: 1.5rem;
text-align: left;
color: inherit;
text-decoration: none;
border: 2px solid#000000;
border-radius: 2.5px;
flex-direction: column;
box-shadow: 5px 6px 0px black;
}
.card h3 {
margin: 0 0 1rem 0;
font-size: 1.5rem;
}
.card li {
margin: 0;
font-size: 1.25rem;
line-height: 1.5;
list-style: none;
font-family: DF;
}
a {
color: rgb(0, 119, 255);
}
strong {
color: dodgerblue;
}
.btn {
display: inline-block;
border-radius: 4px;
border: 1px solid $color;
color: $color;
text-decoration: none;
padding: 10px 30px;
margin-left: 15px;
}
.btn:hover {
color: #fff;
background-color: $color;
}
모든 것이 다 좋다종료 전 단계
터미널 유형에서...
$ npm run generate
하면, 만약, 만약...걱정하지 마라, 이것은 부드러운 잘못이다
생성 후
우리는
serve
를 사용하여 출력 구축에 서비스를 제공할 것이다$ npx serve dist
# or
$ sudo npm i -g serve
$ serve dist
이동 localhost:5000
결과 보기Firebase에 배포(옵션)
전역 설치 Firebase
하면, 만약, 만약...
npm i -g firebase firebase-tools
mac 또는 linux$ sudo npm i -g firebase firebase-tools
지금 이동 firebase console웹 응용 프로그램을 만듭시다
and create a new project
hosting
final touches
복제
"site"
아이템항목으로 이동하여 입력
$ firebase login
브라우저에서 로그인합니다.initializing
$ firebase init
이동
firebase.json
{
"hosting": {
"site": "contactus-x",
"public": "dist",
...
}
}
마지막 단계$ firebase deploy --only hosting:contactus-x
그렇습니다.$ echo happy coding ⌨️
Reference
이 문제에 관하여(Nuxt와 FaunaDB를 사용하여 멋진 간단한 연락처 페이지를 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/abdfnx/how-to-build-a-cool-simple-contact-page-with-nuxt-and-faunadb-5fid텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)