[Back-end🦁] #40 Node.js
51385 ワード
1. Github
#39は、次いで、修正、stash、cherry−pick、pull要求を整理した.
2. Node.js
1. node?? JavaScript実行時:JavaScriptが実行できる環境(アクチュエータ)を指す.本来JavaScriptはブラウザでのみ実行されます. JavaScriptを非ブラウザからサーバに移行し、サーバを作成できます. 特長イベントに基づく:イベントが発生したときに予め指定された操作を実行する. イベントループ:実行するタスクをコールスタックに積み上げ、バックグラウンドで実行する必要があるタスクをバックグラウンドに送信し、バックグラウンドタスクが完了した後、タスクスタック内のタスクをコールスタックに積み上げ、コールスタック内のタスクがすべて完了した後、イベントループはタスクキュー内のタスクをコールスタックに移動して実行する. Non-Blocking I/O <->I/Oをロックするには、サーバの稼働中にクライアントが待機する必要があります. 非同期入出力、キャッシュが処理されていないので、まずコーヒーメーカーに渡します!) 時間の作業はバックグラウンドで行います.クライアントは、タスクの進行中にサーバにリクエストを送信し続けることができます. シングルThread(1キャッシュ) すべてのリクエストは、1つのスレッドによって担当されます. スレッドに問題が発生すると、スレッド全体に問題が発生します. シングル!これにより、メモリまたはリソースを効率的に使用できます. <->マルチスレッド:複数のスレッドスライス処理は、1つのスレッドに問題が発生しても代替できますが、スレッド切り替え時にコストが発生し、スレッドが遊んでいる問題が発生する可能性があります. 長所単一スレッド、ブロックI/Oなし、処理速度が速い->チャット、I/O密集型サーバーに適しています. コンピュータ資源の消費が少なく、生産効率が高い. 短所単一スレッドは、リソースを大量に消費するタスクを実行する際に、負荷が大きい. シングルスレッド==1つのCPUコアのみを使用->CPUタスクの多いサーバでは使用できません. 論理が複雑な場合、コルバー地獄に陥る可能性があります. エラーが発生すると、プロセス自体が死亡します. ->論理が簡単で、応答速度が速く、開発速度が速く、非同期で実行する必要があるサービスに適しています.
->インストール後に使用し、環境がインストールできない場合はクラウドIDE、AWSなどを使用できます.
2.ノード環境で実行
モジュールを作成し、制御モジュールのjsファイルを実行モジュールの構造に配置します.
npmはアプリショップのようなものと見なすことができます.ユーザー固有のフォルダを生成します(ユーザー名を使用してフォルダ名を作成してください). 各フォルダでuserinfoを使用します.txtを生成したら、Username、Identifier、Jobを次の表に保存してください.
\r : Carriage Return
Linuxでは、rは関係ないので、自分でnに変更します.
splitでいいのは正規表現ですか?そしてうろうろ...split!!! split!!!!
7. http
httpモジュール付きでGET、POST方式でリクエストを出した場合、データがどこに入るかの撮影作業を行いました.今の処理反応はまだ何をしているかのような感じで、完全に理解できません…! githubコースが終わりました. ちょっと修正してない感じで….せっかく提出したのに誤字があって、再提出が必要な時に使えばいいです.でも他の人と一緒に仕事をするならいらないから...?やっています.自分で使うときはよく使う私はずっとpull requestが何なのか知りたいですが、本当にプロジェクトをしているわけではないので、先に延期して、これを学んで嬉しいです. node.jsの授業を受けました. まずは…!おもしろい!短いコードで実際のサービスのようにurlを通じてページを伝えることができるのは本当に不思議です.
プロジェクトをしている間に、データフォーマットを調べるために、一旦入ってバックエンドコードを見てみましたが、どう考えてもフロントより短く見えますが、チームメンバーはいつもエラーで大変なので、どのようなエラーが発生するのでしょうか?私はそう思っています.今分かりました.
#39は、次いで、修正、stash、cherry−pick、pull要求を整理した.
2. Node.js
1. node??
->インストール後に使用し、環境がインストールできない場合はクラウドIDE、AWSなどを使用できます.
2.ノード環境で実行
node
# node 런타임에서 직접 코드 입력해서 실행 가능
node filename
# js파일을 실행시켜줌. - 어떤 페이지에 갔을 때 어떤 js파일을 실행할지 같은 것을 node로 제어
> console.log('hello world'); # node 의 console 은 global.console.
3.モジュールモジュールを作成し、制御モジュールのjsファイルを実行モジュールの構造に配置します.
// 제어하는 파일.
// 필요한 js 파일을 가져와서 사용.
const 개인프로필 = require('./two');
console.log(개인프로필.이름);
console.log(개인프로필.나이); //100
개인프로필.한살더먹음();
개인프로필.한살더먹음();
console.log(개인프로필.나이); //100 - export 하던 시점의 나이가 찍히는 것.
console.log(개인프로필.값가져오기()); // 102
// 모듈
let 이름 = 'ddosang';
let 나이 = 100;
function 한살더먹음() {
나이 += 1;
}
function 값가져오기() {
return 나이;
}
module.exports.이름 = 이름;
module.exports.나이 = 나이;
module.exports.한살더먹음 = 한살더먹음;
module.exports.값가져오기 = 값가져오기;
4.シンプルなサーバを作成!// 간단한 서버 만들기!
const http = require('http');
const fs = require('fs');
// 실행하면 자동적으로 main, favicon에 대한 request가 2 번 날아감.
const app = http.createServer(function(request, response) {
let url = request.url;
console.log(`request : ${request}`);
console.log(`request : ${request.url}`);
if (request.url == '/') {
// 메인페이지 보여주기
url = '/index.html';
} else if (request.url == '/blog') {
// 블로그페이지 보여주기
url = '/blog.html';
} else if (request.url == '/favicon.ico') {
// favicon 을 못찾으면...
// 근데 해킹을 대비해서 못찾아도 200을 내보내기도 한다.
return response.writeHead(404);
} else {
response.writeHead(404);
response.end('Not found');
}
response.writeHead(200);
// 응답이 끝날 때 해당 페이지를 열어줌.
response.end(fs.readFileSync(__dirname + url));
});
// 3000번 포트에서 동작하게 한다.
app.listen(3000);
5.最新の文法npm init --yes
# package.json 이 생성됨.
一般モジュールのインストール後に削除します.package.json, app.jsのみアップロードします.npmはアプリショップのようなものと見なすことができます.
// main
import * as 개인프로필 from './two.js'; // 전체 다 가져올 때.
// import {이름, 나이, 한살더먹음, 값가져오기} from './two.js';
console.log(이름);
console.log(나이); //100
개인프로필.한살더먹음();
개인프로필.한살더먹음();
console.log(나이); //102 - export로 하니까 제대로 출력!!!
console.log(값가져오기()); // 102
// module
export let 이름 = "ddosang";
export let 나이 = 10;
export function 한살더먹음() {
나이 += 1;
}
export function 값가져오기() {
return 나이;
}
5.パスモジュール// 공식문서 링크 : https://nodejs.org/dist/latest-v14.x/docs/api/path.html
const path = require('path');
console.log(`구분자 : ${path.sep}`);
console.log(`디렉토리 : ${path.dirname(__filename)}`);
console.log(`파일이름 : ${path.basename(__filename)}`);
console.log(`확장자 : ${path.extname(__filename)}`);
console.log(__filename);
console.log(__dirname);
console.table(path.parse(__filename));
console.log(path.join(__dirname, 'source')); // 경로에 폴더나 파일 추가할때 + 같은거 쓰지 말고 path.join으로 합치자.
6. file system// 공식문서 링크 : https://nodejs.org/dist/latest-v14.x/docs/api/fs.html
const fs = require('fs');
// rename, readFile, writeFile, appendFile, copyFile, mkdir
// 1. rename
let 변수 = 'ddosang' // 사용자 이름
let 날짜 = new Date()
fs.rename('./test.txt', `./${변수}${날짜.getMilliseconds()}.txt`, (err) => {
console.log(err); // 사용자가 올린 이미지를 어떤 이름으로 올릴지에 대한 고려는 미리 해야한다.
})
// 2. readFile
fs.readFile('./test.txt', 'utf8', (err, data) => {
console.log(err);
console.log(data);
})
// 3. readDirectory
fs.readdir('./', (err, data) => {
console.log(err);
console.log(data);
})
// 4. writeFile
fs.writeFile('./test2.txt', 'hello world 2', (err)=>{
console.log(err)
});
// 5. appendFile
fs.appendFile('./test2.txt', 'hello world 3', (err)=>{
console.log(err)
});
// 6. copyFile
fs.copyFile('./test2.txt', './test3.txt', (err)=>{
console.log(err)
});
// 6
fs.mkdir('./yoyo', (err)=>{
console.log(err)
});
Quiz!!Username, Identifier, job
booker, 129012, programmer
grey, 072070, coder
johnson, 814081, data scientist
jenkins, 469346, front-end developer
smith, 795079, back-end developer
Username : booker
Identifier : 129012
Job : promgrammer
// 내가 짠 코드 - 나는 readFile 안에서 콜백을 써서 그런 문제는 없었지만 readFile은 비동기라서 밖에서 순차적으로 사용하면 파일을 읽지 않았는데 다음것이 실행돼서 오류가 나기도 한다. readFileSync나 Promise를 사용하자.
const fs = require('fs');
fs.readFile('./username.csv', 'utf8', (err, data) => {
// \n으로 한번 자르고 그걸 ', '로 한번 잘라서 2차원 array로.
const dataArr = data.split('\n').map(item => item.split(', '));
// 사람 수 (arr 행)만큼 돌면서
for(let i = 1; i < dataArr.length; i++){
// username 으로 폴더 생성.
fs.mkdir(`./${dataArr[i][0]}`, (err)=>{
console.log(err)
});
// 사람 정보 개수(arr 열)만큼 돌면서
for (let j = 0; j < dataArr[0].length; j++) {
// file에 정보 넣기!
fs.appendFile(`./${dataArr[i][0]}/userinfo.txt`, `${dataArr[0][j]} : ${dataArr[i][j]}\n`, (err)=>{
console.log(err)
});
// console.log(`${dataArr[0][j]} : ${dataArr[i][j]}`);
}
}
});
// 다른 분 코드를 보고 보완한 코드!!
fs.readFile('./username.csv', 'utf8', (err, data) => {
const splitedData = data.split('\n').map(info => info.split(', '));
const columnTitle = splitedData[0];
splitedData.slice(1)
.forEach((personData) => {
username = personData[0];
fs.mkdir(`./${username}`, (err) => {});
for (i in personData) {
console.log(i);
fs.appendFile(`./${username}/userinfo.txt` ,`${columnTitle[i]} : ${personData[i]}\n`, (err) => {});
}
});
});
\n : LineFeed\r : Carriage Return
Linuxでは、rは関係ないので、自分でnに変更します.
splitでいいのは正規表現ですか?そしてうろうろ...split!!! split!!!!
7. http
httpモジュール付きでGET、POST方式でリクエストを出した場合、データがどこに入るかの撮影作業を行いました.今の処理反応はまだ何をしているかのような感じで、完全に理解できません…!
// 모듈 포함.
const http = require('http');
const fs = require('fs');
const querystring = require('querystring');
const server = http.createServer(function(req, res){
console.log('server가 구동중입니다.');
// get과 post 둘 다 테스트
if(req.method == 'GET') {
fs.readFile('./test.html', 'utf8', (err, data) => {
console.log(err);
//writeHead대신 setHeader를 사용하여 type을 보낼 수 있음
res.writeHead(200, {'Content-Type':'text/html'});
res.write(data);
res.end();
})
} else if(req.method =='POST') {
req.on('data', function(chunk) {
console.log(chunk.toString());
let data = querystring.parse(chunk.toString());
console.log(data);
res.writeHead(200, {'Content-Type':'text/html'});
res.write(`id : ${data.id_value}, pw : ${data.pw_value}`);
res.end();
});
}
});
server.listen(8080);
3.小回顧プロジェクトをしている間に、データフォーマットを調べるために、一旦入ってバックエンドコードを見てみましたが、どう考えてもフロントより短く見えますが、チームメンバーはいつもエラーで大変なので、どのようなエラーが発生するのでしょうか?私はそう思っています.今分かりました.
Reference
この問題について([Back-end🦁] #40 Node.js), 我々は、より多くの情報をここで見つけました https://velog.io/@ddosang/Front-end-40テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol