404 рд░рд┐рдлреНрд░реЗрд╢ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдЙрдкрдХрд░рдг рдХреЛ рд░реЛрдбрд╣реЛрдЧ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
@sorrycc
рдбреАрд╡рд╛-рдХреНрд▓реА рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рд╣реИ рд╡рд╣ рд░реЛрдбрд╣реЛрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЕрднреА рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рд░реЛрдбрд╣реЛрдЧ рдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдРрд╕реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП package.json
рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ?
@sorrycc
{
"рдирд┐рдЬреА": рд╕рдЪ рд╣реИ,
"рд╕реНрдХреНрд░рд┐рдкреНрдЯ": {
"рдкреНрд░рд╛рд░рдВрдн": "рд░реЛрдбрд╣реЛрдЧ рд╕рд░реНрд╡рд░",
"рдмрд┐рд▓реНрдб": "рд░реЛрдбрд╣реЛрдЧ рдмрд┐рд▓реНрдб",
"рд▓рд┐рдВрдЯ": "рдПрд╕реНрд▓рд┐рдиреНрдЯ --ext .js src test",
"рдкреНрд░реАрдХрдорд┐рдЯ": "рдПрдирдкреАрдПрдо рд░рди рд▓рд┐рдВрдЯ"
},
"рдЗрдВрдЬрди": {
"рдЗрдВрд╕реНрдЯреЙрд▓-рдиреЛрдб": "6.9.2"
},
"рдирд┐рд░реНрднрд░рддрд╛": {
"animate.css": "^3.5.2",
"рдПрдВрдЯреАрдбреА-рдореЛрдмрд╛рдЗрд▓": "^0.9.14",
"рдмреЗрдмреЗрд▓-рд░рдирдЯрд╛рдЗрдо": "^6.9.2",
"рдбреАрд╡реАрдП": "^ 1.2.1",
"рдкрд▓": "рдирд╡реАрдирддрдо",
"рдкрде-рд╕реЗ-regexp": "рдирд╡реАрдирддрдо",
"рдХреНрдпреВрдПрд╕": "рдирд╡реАрдирддрдо",
"рдЖрд░рд╕реА-рдлреЙрд░реНрдо": "^1.3.0",
"рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛": "^15.4.0",
"рд░рд┐рдПрдХреНрд╢рди-рдбреЛрдо": "^15.4.0",
"рд╡реАрдХреНрд╕рд┐рди-рдЬреЗрдПрд╕-рдПрд╕рдбреАрдХреЗ": "^ 1.2.0"
},
"рджреЗрд╡ рдирд┐рд░реНрднрд░рддрд╛": {
"рдмреЗрдмреЗрд▓-рдПрд╕реНрд▓рд┐рдВрдЯ": "^7.1.1",
"рдмреЗрдмреЗрд▓-рдкреНрд▓рдЧрдЗрди-рдбреАрд╡рд╛-рдПрдЪрдПрдордЖрд░": "^0.3.2",
"рдмреЗрдмреЗрд▓-рдкреНрд▓рдЧрдЗрди-рдЖрдпрд╛рдд": "^ 1.1.0",
"рдмреЗрдмреЗрд▓-рдкреНрд▓рдЧрдЗрди-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо-рд░рдирдЯрд╛рдЗрдо": "^6.9.0",
"рдПрд╕реНрд▓рд┐рдВрдЯ": "^3.12.2",
"рдПрд╕реНрд▓рд┐рдВрдЯ-рдХреЙрдиреНрдлрд┐рдЧ-рдПрдпрд░рдмреАрдПрдирдмреА": "^13.0.0",
"рдПрд╕реНрд▓рд┐рдВрдЯ-рдкреНрд▓рдЧрдЗрди-рдЖрдпрд╛рдд": "^ 2.2.0",
"рдПрд╕реНрд▓рд┐рдВрдЯ-рдкреНрд▓рдЧрдЗрди-рдЬреЗрдПрд╕рдПрдХреНрд╕-рдП11рд╡рд╛рдИ": "^ 2.2.3",
"рдПрд╕реНрд▓рд┐рдВрдЯ-рдкреНрд▓рдЧрдЗрди-рд░рд┐рдПрдХреНрд╢рди": "^6.8.0",
"рдЙрдореНрдореАрдж": "^ 1.20.2",
"рд╣рд╕реНрдХреА": "^0.12.0",
"рд░реЗрдбрдмреЙрдХреНрд╕-рд░рд┐рдПрдХреНрд╢рди": "^ 1.3.2",
"рд░реЛрдбрд╣реЛрдЧ": "^0.5.2"
}
}
package.json
рдареАрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИред . рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рддреЛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╣реИрдВ ред рдпрджрд┐ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдВрддрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред
@sorrycc
рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреАред http://localhost :8000/users рдЬреИрд╕реЗ рдкрдереЛрдВ рдХреЛ http://localhost :8000/users/users рдЬреИрд╕рд╛ рдПрдХ рдФрд░ рд╕реНрддрд░ рд╣реИ, рддреЛ рдЖрдк рдХреЗрд╡рд▓ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреВрдж рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрд▓рдЯ рджреЗрддреЗ рд╣реИрдВ, рдЖрдк рд╕реАрдзреЗ рдЗрд╕рдХрд╛ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдХреНрдпрд╛ рдореЗрд░реА рд▓рд┐рдЦрд╛рд╡рдЯ рдЧрд▓рдд рд╣реИ рдпрд╛ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реИ?
рдореИрдВрдиреЗ рдХреНрд░реЛрдо рдХреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реА, рдФрд░ рдЗрд╕рдиреЗ рдЕрдирдХреЙрдЯ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдПрд░рд░ рдХреА рд╕реВрдЪрдирд╛ рджреА: рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЯреЛрдХрди <
рдбреАрд╡рд╛-рдЙрджрд╛рд╣рд░рдг-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдбреИрд╢рдмреЛрд░реНрдб рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ
рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмреНрд░рд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред
@sorrycc
рдЗрд╕ рдкрде рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк /рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ/рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ/рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рддрд╛рдЬрд╝рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдк рдХреЗрд╡рд▓ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреВрдж рд╕рдХрддреЗ рд╣реИрдВ
рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди URL рдореЗрдВ # рд╕рдорд╕реНрдпрд╛ рд╣реИред
рд╕рдВрджрд░реНрдн: https://github.com/dvajs/dva-knowledgemap#Switch-history-to-browserhistory
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрддрд┐рд╣рд╛рд╕ #
рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
@sorrycc
рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
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/#/
рдпрджрд┐ рдЖрдк # рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкрде рдирд╣реАрдВ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдорд▓реНрдЯреА-рд▓реЗрд╡рд▓ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдХреЛ рд░реАрдлреНрд░реЗрд╢ рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛: рд╣реИрд╢рд╣рд┐рд╕реНрдЯреНрд░реА рдЙрдкрд▓рдмреНрдз рд╣реИ, рдмреНрд░рд╛рдЙрдЬрд░рд╣рд┐рд╕реНрдЯреНрд░реА рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ (рдорд╛рдВрдЧ рдкрд░ рд▓реЛрдб)
BrowserHistory рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИред рдХреНрдпрд╛ рдпрд╣ 404 рдпрд╛ рд░рд┐рдХреНрдд рдкреГрд╖реНрда рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдпрджрд┐ рдкреГрд╖реНрда рд░рд┐рдХреНрдд рд╣реИ, рддреЛ рдХрдВрд╕реЛрд▓ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдпрджрд┐ js рд▓реЛрдб рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ publicPath рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ ред
рдмреНрд░рд╛рдЙрдЬрд░рд╣рд┐рд╕реНрдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд░реВрдЯ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЪрдЯреАрдПрдордПрд▓ рдХреА рдЬреЗрдПрд╕ рдЖрдпрд╛рдд рд╡рд┐рдзрд┐ рдмрджрд▓реЗрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдиреБрд╕рд╛рд░:
<script src="/index.js"></script>
@sorrycc рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ
@рдХреИрд░реА1227
рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ
@ kairi1227 рдзрдиреНрдпрд╡рд╛рдж ~ рдЬрдбрд╝ рд╕реЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ + рд░рд┐рдбрдХреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рдореИрдВрдиреЗ рдПрдХ рдбреАрд╡реАрдП рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рд╣реИред
рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдк рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рддреЗ рд╕рдордп html рдХреЛ / рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ ./
рдпрд╣ рдкрдмреНрд▓рд┐рдХрдкрд╛рде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдФрд░ рдПрдкреАрдкреА рдПрдЪрдбреА рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЬрдм рджреВрд╕рд░реЗ рд╕реНрддрд░ рдХреЗ рдбреЛрдореЗрди рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░реАрдлреНрд░реЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ '/' рдЬреЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЕрдорд╛рдиреНрдп рдерд╛ред
рдХреНрдпрд╛ рдореЗрд░реА рд░реВрдЯрд┐рдВрдЧ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ?
<Route path="/" component={ CreateRelevance }>
<Route path="bg/create" component={ CreateRelevance } />
</Route>
</Router>
@sorrycc
@sorrycc
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рд╣реЛ рдЪреБрдХрд╛ рд╣реИред
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрддрд┐рд╣рд╛рд╕ рдореЛрдб рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╛ рдореЛрдб рд╣реИ;
Nginx рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: try_files $uri $uri/ /index.html;
@ резреорелрелрепрепрепрепрекрелреи рдЕрдЧрд░ рд╕рд░реНрд╡рд░ nginx рдХреЗ рдмрдЬрд╛рдп apache рд╣реИ рддреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ?
рдХреЛрдЖ-рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛, рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ:
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;
})
...
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдмреНрд░рд╛рдЙрдЬрд░рд╣рд┐рд╕реНрдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд░реВрдЯ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЪрдЯреАрдПрдордПрд▓ рдХреА рдЬреЗрдПрд╕ рдЖрдпрд╛рдд рд╡рд┐рдзрд┐ рдмрджрд▓реЗрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдиреБрд╕рд╛рд░:
<script src="/index.js"></script>
@sorrycc рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ