์๋ก ๊ณ ์นจ ํ 404๊ฐ๋ณด๊ณ ๋ฉ๋๋ค. ๋ณ๊ฒฝํ๋ ค๋ฉด ์ด๋ป๊ฒํด์ผํฉ๋๊น?
์ด ๋๊ตฌ๋ 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์๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ ๋ฌธ์ ์์ด ๋ฆ์ผ๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค.
ํ
์ด ๊ฒฝ๋ก๋ ์๋ก ๊ณ ์น ์ ์์ง๋ง / users๋ฅผ / users / users๋ก ๋ณ๊ฒฝํ๋ฉด ์๋ก ๊ณ ์น ์ ์์ผ๋ฉฐ ๋งํฌ๋ฅผ ํตํด์๋ง ์ด๋ํ ์ ์์ต๋๋ค.
ํ์คํ ๋ฆฌ๋ฅผ ์์ ํ๋ฉด์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง 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;
})
...
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
browserHistory๋ฅผ ์ฌ์ฉํ ๋ html์ js ๊ฐ์ ธ ์ค๊ธฐ ๋ฐฉ๋ฒ์ ๋ฃจํธ์์ ๊ฐ์ ธ ์ค๋๋ก ๋ณ๊ฒฝํ์ญ์์ค.
๋ค์๊ณผ ๊ฐ์ด :
<script src="/index.js"></script>
@sorrycc ๋์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.