Dva: browserHistory๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ƒˆ๋กœ ๊ณ ์น  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 02์›” 15์ผ  ยท  25์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dvajs/dva

์ƒˆ๋กœ ๊ณ ์นจ ํ›„ 404๊ฐ€๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

faq question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

browserHistory๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ html์˜ js ๊ฐ€์ ธ ์˜ค๊ธฐ ๋ฐฉ๋ฒ•์„ ๋ฃจํŠธ์—์„œ ๊ฐ€์ ธ ์˜ค๋„๋ก ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.
๋‹ค์Œ๊ณผ ๊ฐ™์ด :
<script src="/index.js"></script>

@sorrycc ๋Š”์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  25 ๋Œ“๊ธ€

์ด ๋„๊ตฌ๋Š” roadhog ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ—‰
์ตœ์‹  ๋ฒ„์ „์˜ dva-cli๋กœ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ๋Š” roadhog์ด์ง€๋งŒ ์—ฌ์ „ํžˆ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๋“œ ํ˜ธ๊ทธ๊ฐ€ ํŠน๋ณ„ํžˆ ๋‹ค๋ฃจ์—ˆ ์œผ๋‹ˆ ์ด๋ก ์ƒ ๊ทธ๋Ÿฐ ๋ฌธ์ œ๋Š” ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. package.json ๊ฒŒ์‹œ๋ฌผ์„ ๋ณด์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

ํ—‰
{
"private": ์ฐธ,
"์Šคํฌ๋ฆฝํŠธ": {
"start": "๋กœ๋“œ ํ˜ธ๊ทธ ์„œ๋ฒ„",
"build": "๋กœ๋“œ ํ˜ธ๊ทธ ๋นŒ๋“œ",
"lint": "eslint --ext .js src ํ…Œ์ŠคํŠธ",
"precommit": "npm run lint"
},
"engines": {
"install-node": "6.9.2"
},
"์ข…์†์„ฑ": {
"animate.css": "^ 3.5.2",
"antd-mobile": "^ 0.9.14",
"babel-runtime": "^ 6.9.2",
"dva": "^ 1.2.1",
"moment": "์ตœ์‹ ",
"regexp์— ๋Œ€ํ•œ ๊ฒฝ๋กœ": "์ตœ์‹ ",
"qs": "์ตœ์‹ ",
"rc-form": "^ 1.3.0",
"๋ฐ˜์‘": "^ 15.4.0",
"react-dom": "^ 15.4.0",
"weixin-js-sdk": "^ 1.2.0"
},
"devDependencies": {
"babel-eslint": "^ 7.1.1",
"babel-plugin-dva-hmr": "^ 0.3.2",
"babel-plugin-import": "^ 1.1.0",
"babel-plugin-transform-runtime": "^ 6.9.0",
"eslint": "^ 3.12.2",
"eslint-config-airbnb": "^ 13.0.0",
"eslint-plugin-import": "^ 2.2.0",
"eslint-plugin-jsx-a11y": "^ 2.2.3",
"eslint-plugin-react": "^ 6.8.0",
"์˜ˆ์ƒ": "^ 1.20.2",
"ํ—ˆ์Šคํ‚ค": "^ 0.12.0",
"redbox-react": "^ 1.3.2",
"roadhog": "^ 0.5.2"
}
}

package.json ๊ดœ์ฐฎ์•„ ๋ณด์ž…๋‹ˆ๋‹ค. . dva-example-user-dashboard๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€

ํ—‰
http : // localhost : 8000 / users์™€ ๊ฐ™์€ ๊ฒฝ๋กœ๋Š” ๋งˆ์Œ๋Œ€๋กœ ์ƒˆ๋กœ ๊ณ ์น  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฒฝ๋กœ๊ฐ€ http : // localhost : 8000 / users / users์™€ ๊ฐ™์€ ํ•œ ๋‹จ๊ณ„ ๋” ์žˆ์œผ๋ฉด ๋งํฌ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋’ค์ง‘ ์œผ๋ฉด ์ง์ ‘ ์š”์ฒญํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ธ€์ด ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜ ์ด์œ ๊ฐ€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํฌ๋กฌ์˜ ๋””๋ฒ„๊น… ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ดํŽด๋ณธ ๊ฒฐ๊ณผ Uncaught SyntaxError : Unexpected token <

dva-example-user-dashboard์—๋Š” ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

image

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ฌธ์ œ์—†์ด ๋‹ฆ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ—‰
์ด ๊ฒฝ๋กœ๋Š” ์ƒˆ๋กœ ๊ณ ์น  ์ˆ˜ ์žˆ์ง€๋งŒ / users๋ฅผ / users / users๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์ƒˆ๋กœ ๊ณ ์น  ์ˆ˜ ์—†์œผ๋ฉฐ ๋งํฌ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
wx20170216-120305 2x
wx20170216-120322 2x

ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ URL์— # ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฐธ์กฐ : https://github.com/dvajs/dva-knowledgemap#Switch-history-to-browserhistory

browserHistory์— # ์ด ์—†์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ—‰
๋‹ค์Œ์€ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

import dva from 'dva';
import 'antd/dist/antd.css';
import { useRouterHistory } from 'dva/router';
import { createHashHistory } from 'history';
import message from 'antd/lib/message';

// 1. Initialize
const app = dva({
  history: useRouterHistory(createHashHistory)({ queryKey: false }),
  onError: (e) => {
    message.error(e.message);
  }
});

๋ธŒ๋ผ์šฐ์ €์— http://localhost:8000/ ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ž๋™์œผ๋กœ
http://localhost:8000/#/

#์„ ์ œ๊ฑฐํ•˜๋ฉด ํ•ด๋‹น ๊ฒฝ๋กœ๋ฅผ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹ค๋‹จ๊ณ„ ๋ผ์šฐํŒ… ์ค‘์— ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ ํ‘œ์‹œ ์ค„์„ ์ƒˆ๋กœ ๊ณ ์น˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. hashHistory๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  browserHistory๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค (์š”์ฒญ์‹œ๋กœ๋“œ).

BrowserHistory๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. 404 ๋˜๋Š” ๋นˆ ํŽ˜์ด์ง€๋ฅผ๋ณด๊ณ ํ•ฉ๋‹ˆ๊นŒ? ํŽ˜์ด์ง€๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด ์ฝ˜์†”์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. js ๊ฐ€๋กœ๋“œ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ publicPath๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

browserHistory๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ html์˜ js ๊ฐ€์ ธ ์˜ค๊ธฐ ๋ฐฉ๋ฒ•์„ ๋ฃจํŠธ์—์„œ ๊ฐ€์ ธ ์˜ค๋„๋ก ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.
๋‹ค์Œ๊ณผ ๊ฐ™์ด :
<script src="/index.js"></script>

@sorrycc ๋Š”์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ—‰ํ—‰
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ์ •๋ง ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค

@ kairi1227 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ~ ๋ฃจํŠธ์—์„œ ์†Œ๊ฐœ, ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

์†”์งํžˆ ์‹œ๊ฐ„์„ ๋“ค์—ฌ react + redux ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

dva ์ดˆ๊ธฐํ™” ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
๊ฐœ๋ฐœํ•  ๋•Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ธ์šฉ ํ•  ๋•Œ html์„ /๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํฌ์žฅ ํ›„ ./๋กœ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค.
์ด๊ฒƒ์€ publicPath๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ APP HD์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ด€์‹ฌ์ด์žˆ๋Š” ๋ถ„์€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค .2 ๋‹จ๊ณ„ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋””๋ ‰์…˜ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒˆ๋กœ ๊ณ ์นจ์€ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์œ„์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  js ํŒŒ์ผ์— '/'๋ฅผ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด ๋ผ์šฐํŒ…์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?


        <Route path="/" component={ CreateRelevance }>
            <Route path="bg/create" component={ CreateRelevance } />
        </Route>
   </Router>

๋ฟก๋ฟก

ํ—‰
์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
browserHistory ๋ชจ๋“œ์—์„œ๋Š” ์ŠคํŒŒ ๋ชจ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
nginx ๊ตฌ์„ฑ ํ•„์š” : try_files $ uri $ uri / /index.html;

@ 18559909452 ์„œ๋ฒ„๊ฐ€ nginx ๋Œ€์‹  ์•„ํŒŒ์น˜์ธ์ง€ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

koa ๊ด€๋ จ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ  ์šฉ์œผ๋กœ ๊ฒŒ์‹œํ•˜์„ธ์š”.

const fs = require('fs');
const router = require('koa-router')();

router.get('/*', async (ctx) => {
    const html = fs.readFileSync(path.resolve(filePath));
    ctx.type = 'html';
    ctx.body = html;
  })
...
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰