[TIL] Node.js - Express.js
リクエスト主体のデータを検索するのはいつもエラーで大変でした.
Unexpected token "in JSON at position 0
送られてきたデータはオブジェクトや配列ではなく文字列だけで
express.json()
でデータマイニングはできないようですが、どこを修正するのかわからずうろうろしていました.最初に,送信要求のページコードを変更し,文字列ではなくキー値オブジェクト型に送信することで解決する.しかし他の人はクライアントコードに触らずサーバーコードだけを修正してもいいと言っているのでExpress.しばらくjs公式文書を見ました.フェルさんと沈黙の中で答えを探して、二人はほとんど同時に答えを見つけた.express.json()
のstrict
オプションをfalse
に変更し、オブジェクトや配列でなくても読み取ることができます...!Today I Learned
Express.jsとは何ですか。
Express.なぜjsを使うのですか?
Express.jsの起動
$ npm install express --save
Express.jsを使用したサーバの作成
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World');
});
app.listen(port, () => {
console.log(`server listening at http://localhost:${port}`);
});
応用const cors = require('cors'); // npm install cors로 설치 후 사용
// CASE 1 : 모든 요청에 적용
app.use(cors());
// CASE 2 : 특정 라우트에만 적용
app.get('/', cors(), (req, res) => {
res.send('Hello World');
});
// CASE 3 : CORS 옵션
app.use(cors({
origin: 'http://allowonlythiorigin.com'
}))
// app.METHOD(PATH, HANDLER);
// Example :
app.get('/', (req, res)=> {
res.send('Hello World');
});
app.post('/post', (req, res) => {
// some action to create a new post based on
// the data in the request body
})
app.use(express.json());
// express.json 옵션 설정
// exporess.json({strict: false}) => 배열이나 객체가 외 자료형도 가능 (디폴트 true)
let posts = [];
app.post('/post', (req, res) => {
const newPost = {
createdAt: new Date().toISOString(),
title: req.body.title.toUpperCase(),
author: req.body.author,
content: req.body.content,
id: nanoid()
}
posts.push(newPost);
return res.status(200).json({id: newPost.id})
})
// POST '/post'
// body :
// {
// title: "Hello World",
// author: "Alex J. Lee",
// content: "Welcome to my blog!"
// }
// Using Parameter => req.params
// GET '/posts/someid'
app.get('/posts/:id', (req, res) => {
const data = posts.filter(post => {
return post.id === req.params.id;
})
return res.json(data);
})
// Using Query String => req.query
// GET 'posts/?title={query}'
app.get('/posts', (req, res) => {
if (req.query.title !== undefined) {
const filteredPosts = posts.filter(post => {
return post.title.includes(req.query.title.toUpperCase());
});
return res.status(200).json(filteredPosts);
}
res.json(posts);
})
Middlewareとは?
req
)、応答オブジェクト(res
)、および次のミドルウェア関数(next
)へのアクセス権を有する.next
).順番は順番に呼び出されるので、順番が重要です.これ以上接続可能なミドルウェアがなければ、終わります.Middlewareはどこで使用されますか?
自動アプリケーション
cors
)body-parser
またはexpressが提供する解析器)Middlewareの実装例
// 관리자 권한이 있는지 확인
const checkAdmin = (res, req, next) => {
if (req.headers.Authentification === "admin") {
next();
} else {
res.send("You don't have access");
}
}
app.post('/admin-only', checkAdmin, (res, req) => {
// ...
})
Reference
この問題について([TIL] Node.js - Express.js), 我々は、より多くの情報をここで見つけました https://velog.io/@alexjlee/TIL-Node.js-Express.jsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol