移動バックエンドexpressノードjsQ&A


以前は他のプロジェクトでdjangoでアプリケーションサーバ(restapi)を実装していましたが、今回はexpressでアプリケーションサーバを実装しました.負担感が強かったので、数日会っていないエクスプレスをしっかり勉強するためにこの文章を書きました.
gitで交換する
package.jsonのdependencyに従ってnpm install万terminalを検索し、残りはインストールされているようです.
(実験のポイント)
babelをインストールした理由
es 6支援を理由にbabelを失望させたようだ.
require()からimport fromに変わる文法の違いは、よく知っているのはimport fromですが、必ずbabelを勉強しなければならないと思っているので、babelは思い切って抜きます.
ミドルウェア:expressとbody-parser、バージョン(またはpost)の違い
expressのどのバージョン以上body-parserを使わずにexpressを使うことをお勧めするところもありますが、なぜexpressを使うとhttpリクエストがうまく働かないのか知りたいです.
だから調査の結果.
( https://medium.com/@mmajdanski/express-body-parser-and-why-may-not-need-it-335803cd048c )
expressバージョン4.16以上でbody-parserのexpress自体へのマージが開始されました.だから今.
app.use(bodyparser.json()); 
app.use(bodyParser.urlencoded({extended: true}));
これとは異なり、
app.use(express.json());
app.use(express.urlencoded());
このように記入することをお勧めします.
body-parser機能の大部分はexpressでよく実現されているが,特殊な機能ではまだ実現されていない可能性がある.
(実装されていない特殊な機能は、次回リリースされます.)
認証:移動バックエンドのトークン管理
これは、次のソースリンクの3回のビデオを振り返り、説明し、これらのビデオに基づいて作成した文章です.
ソース:https://www.youtube.com/watch?v=tvAgdXMVx9s
https://www.youtube.com/watch?v=7nafaH9SddU
JWTtokenの詳細については、
元のtoken認証では、
Nodejs(express)-Webブラウザ間のtoken認証です.
Esktopクライアントはクッキーを使用して認証を行います.
react nativeでは、custom fetch wrapper for RNという方法を使用してこの問題を解決できます.
そこでreact nativeからクッキーの処理、セッション管理などについて説明します.
// react native에서 custom fetch wrapper 구현한 것
import AsyncStorage from "@react-native-community/async-storage'

export default async function _fetch(url, config) {
  let token;
  try {
    token = await AsyncStorage.getItem('authToken');
    // check if I have the auth token
    
    const body = config && config.body || null;
    const headers = config && config.headers || {};
    
    const configObject = {
      ...config,
      credentials: "omit",
      headers: {
        ...headers,
        'X-Requested-With': 'app',
        'X-Access-Token': String(token),
        // In the server middleware, if 'X-Access-Token' exists, the middleware replace this with the cookie.
        'Cookie': null
      },
      body: JSON.stringify(body)
    }
    // more manipulation
    return fetch(url, configObject);
  } catch (error) {
    console.log('Unauthenticated request');
  }
サーバミドルウェアにもreqが入ってくるときにしなければならないことがあります.
これは.
// middleware for server
function auth(req, res, next){
  // auth는 모든 routes에 대한 미들웨어에 해당한다.
  // express가 session을 parse하기 전에 해당 미들웨어가 있어야 한다는 점 명심.
  const value = req.headers['x-access-token'];
  if (!value) {
    // not authenticated
    // OR
    // normal browser user
    return next();
  }
  // manually inject the cookie: sid=default node cookie standard
  req.headers.cookie = `connect.sid=s%3A${value};`
  next()
}
これです.
このとき、jwt accesstokenを使うかusercustom token方式を使うか知りたいのですが(これはビデオをもう一度見てから知る必要があるようです)...