반응형

우선 첫번째로 의심해봐야 할것은 포트번호가 사용중인가이다.

 

cmd창에서 'netstat -ano' 를 입력한다.

 

그러고 포트번호를 확인한다 만약 내가 입력한 4000의 포트번호가 보이면 

우측에 PID 를확인한다.

그러고 나서 작업프로그램 ->세부정보 ->PID 찾아서 종료

하면된다.

 

하지만 오늘은 다른 오류였다.

그것은 바로 events.js:287 이의 오류였다

이걸로 두시간정도 쏟은거 같다. 왜일까 고민을해봤는데.. 

PORT 번호를 env 파일에서 불러오고 있었는데 거기에서 PORT:4000;

이렇게 세미콜론을 찍어서 PORT번호에 '4000;' 이 들어가서 오류가 생긴거였다..

세미콜론 잘 확인하자..!

반응형
반응형

1.nodemailer 설치 

npm install nodemailer

2.mailgun 가입하기

https://www.mailgun.com/

 

Mailgun Technologies

Powerful Transactional Email APIs that enable you to send, receive, and track emails, built with developers in mind. Learn more today!

www.mailgun.com

mailgun 가입하고 보내고 싶은 실제 메일을 verify 해줘야함

여기에 넣고 메일 확인할것!

3.mailgun api,domain 확인하기 

이것도 마찬가지로 sending 누르면 apikey와 domain을준다!

 

 

그러면 코드로 구현을해보자!

 

utils.js

api,domain은 env 파일에서 불러와서 사용했다.

require("dotenv").config({ path: "./src/.env" });
import nodemailer from "nodemailer";
import mgTransport from "nodemailer-mailgun-transport";

const MAILGUN_API = process.env.api_key;
const MAILGUN_DOMAIN = process.env.domain;


export const sendMail = (email) => {
  const options = {
    auth: {
      api_key: MAILGUN_API,
      domain: MAILGUN_DOMAIN,
    },
  };
  const client = nodemailer.createTransport(mgTransport(options));
  return client.sendMail(email);
};

export const sendSecretMail = (address, secret) => {
  const email = {
    from: "hong@honggram.com",
    to: address,
    subject: "Login Secret for honggram",
    html: `<h1> your secret code</h1> 
    <br><h4>${secret}</h4><br>for login honggram`,
  };
  return sendMail(email);
};

sever.js

require("dotenv").config({ path: "./src/.env" });
import { GraphQLServer } from "graphql-yoga";
import logger from "morgan";
import schema from "./schema";
import {sendSecretMail } from "./utils";

sendSecretMail("보내고싶은이메일", "시크릿문자");

const PORT = process.env.PORT || 4000;
const server = new GraphQLServer({ schema });

server.express.use(logger("dev"));

server.start({ port: PORT }, () => {
  console.log(`Server running on http://localhost:${PORT}`);
});

 

 

이렇게 import로 sendSecretMail을 가져와서 그곳에 address와 secret을 주고 실행시키면 

실제 메일이 보내진다!

반응형
반응형
var fs = require('fs');
fs.readFile('sample.txt', 'utf8', function(err, data){
  console.log(data);
});

Read

첫번째 인자는 읽고자하는 파일 두번째인자는 인코딩방식 세번째 인자는 콜백함수로 data에 담겨있는 내용이 파일의 내용

 

 

fs.writeFile('message.txt', 'Hello Node.js', 'utf8', callback);

Create 

 

첫번째 인자는 생성하길 원하는 위치와 이름, 두번째 인자는 그 내용 , 세번째는 인코딩 방식, 네번째는 콜백함수

 

Update

 

let body = "";
    request.on("data", function (data) {
      body += data;
    });
    request.on("end", function () {
      let post = qs.parse(body);
      let id = post.id;
      let title = post.title;
      let description = post.description;
      fs.rename(`./data/${id}`, `./data/${title}`, function (error) {
        fs.writeFile(`./data/${title}`, description, "utf8", function (err) {
          response.writeHead(302, { Location: `/?id=${title}` });
          response.end();
        });
      });
    });

받아온 정보(post형식)를 이용해서  파일이름을 변경시키는 fs.rename을 이용해서 파일이름을 변경시키고

writeFile을 통해서  다시 파일을 쓴다.

그리고 작업이 끝나면 리다이렉션을 해서  url을 변경시킨다. 

 

Delete

 

 fs.unlink(`./data/${id}`, function (err) {
        response.writeHead(302, { Location: `/` });
        response.end();
      });

fs.unlink를 통해서 원하는 경로의 파일을 없앤다. 첫번째 인자는 경로이며 두번째인자는 콜백함수이다.

콜백함수가 실행되면 리다이렉션이 되도록 설정했다.

반응형
반응형

nodejs에서 파일을 읽었는데 그값을 변수에 저장하고 편하게 사용하는 방법이있습니다.

var를 사용하지 않고요 const나 let을 사용할 것입니다.

 

const fs = require("fs");
fs.readFile("sample.txt", "utf8", function (err, data) {
  const description = data;
  console.log(description)  // 이거는 가능
});

console.log(description) // 이거는 유효범위를 벗어나서 불가능

우선 fs모듈을 불러옵니다 file System

그러고 비동기적으로 실행되는 readFile의 문법에 맞춰서 코드를 작성한다음

data의 값이 그 파일을 읽어온 정보이기때문에 

const description을 선언과 동시에 data로 초기화해줍니다.

 

하지만 여기서 문제점이 생깁니다. const,let은 유효범위가 블록단위이기 때문에 

밖에서 실행하면 그 값은 존재하지 않는다는 오류를 일으킵니다.

그러면 이 문제점을 해결하려면 어떻게 해야할까요?

바로 함수를 이용해서 호출하는것입니다. 

const fs = require("fs");
fs.readFile("sample.txt", "utf8", function (err, data) {
  const description = data;
  HandleConsole(description);
});

function HandleConsole(des) {
  console.log(des);
}

   이렇게 함수를 통해서 호출하면 그 값을 온전히 사용할수있습니다.

반응형

+ Recent posts