Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
students
travel
Commits
71aa5b17
Commit
71aa5b17
authored
Jul 13, 2022
by
Lee Soobeom
Browse files
token user.id ref
parent
9fe5e544
Changes
10
Show whitespace changes
Inline
Side-by-side
frontend/src/apis/post.api.ts
View file @
71aa5b17
import
axios
from
"
axios
"
;
import
axios
from
"
axios
"
;
import
baseUrl
from
"
./baseUrl
"
;
import
baseUrl
from
"
./baseUrl
"
;
import
{
Post
ing
Type
}
from
"
../types
"
;
import
{
PostType
}
from
"
../types
"
;
export
const
posting
=
async
(
post
:
Post
ing
Type
)
=>
{
export
const
posting
=
async
(
post
:
PostType
)
=>
{
const
{
data
}
=
await
axios
.
post
(
`
${
baseUrl
}
/posts/`
,
post
);
const
{
data
}
=
await
axios
.
post
(
`
${
baseUrl
}
/posts/`
,
post
);
return
data
;
return
data
;
};
};
frontend/src/post/post.tsx
View file @
71aa5b17
...
@@ -10,7 +10,7 @@ export default function Post({ handleClick, post }: Props) {
...
@@ -10,7 +10,7 @@ export default function Post({ handleClick, post }: Props) {
return
(
return
(
<
div
className
=
"flex flex-row h-16 divide-x-2 border-2 border-solid"
>
<
div
className
=
"flex flex-row h-16 divide-x-2 border-2 border-solid"
>
<
div
className
=
"basis-full"
>
<
div
className
=
"basis-full"
>
<
button
id
=
{
post
.
i
d
}
onClick
=
{
handleClick
}
>
<
button
id
=
{
post
.
userI
d
}
onClick
=
{
handleClick
}
>
{
post
.
title
}
{
post
.
title
}
</
button
>
</
button
>
</
div
>
</
div
>
...
...
frontend/src/post/posting.tsx
View file @
71aa5b17
import
React
,
{
FormEvent
,
useState
}
from
"
react
"
;
import
React
,
{
FormEvent
,
useState
}
from
"
react
"
;
import
{
useNavigate
}
from
"
react-router-dom
"
;
import
isLength
from
"
validator/lib/isLength
"
;
import
isLength
from
"
validator/lib/isLength
"
;
import
equals
from
"
validator/lib/equals
"
;
import
equals
from
"
validator/lib/equals
"
;
// import { addDataList } from "../board/board";
import
{
catchErrors
}
from
"
../helpers
"
;
import
{
catchErrors
}
from
"
../helpers
"
;
import
{
Post
ing
Type
}
from
"
../types
"
;
import
{
PostType
}
from
"
../types
"
;
import
{
postApi
}
from
"
../apis
"
;
import
{
postApi
}
from
"
../apis
"
;
export
default
function
Posting
()
{
export
default
function
Posting
()
{
...
@@ -10,13 +12,15 @@ export default function Posting() {
...
@@ -10,13 +12,15 @@ export default function Posting() {
const
[
theme
,
setTheme
]
=
useState
<
string
>
(
"
질문종류
"
);
const
[
theme
,
setTheme
]
=
useState
<
string
>
(
"
질문종류
"
);
const
[
title
,
setTitle
]
=
useState
<
string
>
(
""
);
const
[
title
,
setTitle
]
=
useState
<
string
>
(
""
);
const
[
text
,
setText
]
=
useState
<
string
>
(
""
);
const
[
text
,
setText
]
=
useState
<
string
>
(
""
);
const
navigate
=
useNavigate
();
const
[
user
,
setUser
]
=
useState
<
Post
ing
Type
>
({
const
[
user
,
setUser
]
=
useState
<
PostType
>
({
title
:
""
,
title
:
""
,
text
:
""
,
text
:
""
,
theme
:
""
,
theme
:
""
,
city
:
""
,
city
:
""
,
username
:
""
,
userId
:
""
,
counts
:
0
,
});
});
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
[
loading
,
setLoading
]
=
useState
(
false
);
...
@@ -32,8 +36,10 @@ export default function Posting() {
...
@@ -32,8 +36,10 @@ export default function Posting() {
if
(
postingFormMatch
())
{
if
(
postingFormMatch
())
{
setLoading
(
true
);
setLoading
(
true
);
const
res
=
await
postApi
.
posting
(
user
);
const
res
=
await
postApi
.
posting
(
user
);
console
.
log
(
"
서버연결됬나요
"
,
res
);
// addDataList(res);
console
.
log
(
"
user save
"
);
// console.log("서버연결됬나요", res);
// console.log("user save");
navigate
(
"
/board
"
,
{
replace
:
true
});
setSuccess
(
true
);
setSuccess
(
true
);
setError
(
""
);
setError
(
""
);
}
}
...
...
frontend/src/types/index.tsx
View file @
71aa5b17
...
@@ -9,18 +9,14 @@ export interface LoginUser {
...
@@ -9,18 +9,14 @@ export interface LoginUser {
password
:
string
;
password
:
string
;
}
}
export
interface
PostType
extends
PostingType
{
export
interface
PostType
{
date
?:
string
;
counts
:
number
;
id
?:
string
;
}
export
interface
PostingType
{
title
:
string
;
title
:
string
;
text
?:
string
;
text
?:
string
;
theme
:
string
;
theme
:
string
;
city
:
string
;
city
:
string
;
username
:
string
;
date
?:
string
;
counts
:
number
;
userId
:
string
;
}
}
export
interface
SignupUser
{
export
interface
SignupUser
{
...
...
src/controllers/post.controller.ts
View file @
71aa5b17
import
{
NextFunction
,
Request
,
Response
}
from
"
express
"
;
import
{
NextFunction
,
Request
,
Response
}
from
"
express
"
;
import
isLength
from
"
validator/lib/isLength
"
;
import
isLength
from
"
validator/lib/isLength
"
;
import
equals
from
"
validator/lib/equals
"
;
import
equals
from
"
validator/lib/equals
"
;
import
{
requireLogin
}
from
"
./auth.controller
"
;
import
{
TypedRequestAuth
}
from
"
./auth.controller
"
;
import
{
asyncWrap
}
from
"
../helpers
"
;
import
{
asyncWrap
}
from
"
../helpers
"
;
import
{
postDb
}
from
"
../db
"
;
import
{
postDb
}
from
"
../db
"
;
export
const
post
ing
=
asyncWrap
(
async
(
req
,
res
)
=>
{
export
const
post
Create
=
asyncWrap
(
async
(
req
Exp
,
res
,
next
)
=>
{
const
{
title
,
text
,
theme
,
city
,
username
,
date
,
counts
}
=
req
.
body
;
const
req
=
reqExp
as
TypedRequestAuth
<
{
userId
:
string
}
>
;
console
.
log
(
"
body
"
,
req
.
body
);
const
{
title
,
text
,
theme
,
city
,
date
}
=
req
.
body
as
{
title
:
string
;
text
:
string
;
theme
:
string
;
city
:
string
;
date
:
Date
;
};
// 0) 로그인 했는지 확인 requireLogin
console
.
log
(
"
body
"
,
req
.
body
);
// 1) title 빈 문자열인지 확인
// 1) title 빈 문자열인지 확인
if
(
!
isLength
(
title
??
""
,
{
min
:
1
}))
{
if
(
!
isLength
(
title
??
""
,
{
min
:
1
}))
{
...
@@ -32,16 +38,16 @@ export const posting = asyncWrap(async (req, res) => {
...
@@ -32,16 +38,16 @@ export const posting = asyncWrap(async (req, res) => {
return
res
.
status
(
422
).
send
(
"
도시를 선택해 주세요
"
);
return
res
.
status
(
422
).
send
(
"
도시를 선택해 주세요
"
);
}
}
// 5) username ref: cookie.token._id -> collection users, "User"-> name
const
userId
=
req
.
auth
.
userId
;
const
newPost
ing
=
await
postDb
.
createPost
ing
({
const
newPost
=
await
postDb
.
createPost
({
title
,
title
,
text
,
text
,
theme
,
theme
,
city
,
city
,
username
,
date
,
date
,
counts
,
user
:
userId
,
});
});
return
res
.
json
(
newPosting
);
return
res
.
json
(
newPost
);
});
});
src/db/post.db.ts
View file @
71aa5b17
import
{
Posting
,
PostingType
}
from
"
../models
"
;
import
{
Post
,
PostType
}
from
"
../models
"
;
import
{
Post
,
PostType
}
from
"
../models
"
;
export
const
createPost
ing
=
async
(
post
ing
:
Post
ing
Type
)
=>
{
export
const
createPost
=
async
(
post
:
PostType
)
=>
{
const
newPosting
=
await
Post
ing
.
create
({
const
newPosting
=
await
Post
.
create
({
title
:
post
ing
.
title
,
title
:
post
.
title
,
text
:
post
ing
.
text
,
text
:
post
.
text
,
theme
:
post
ing
.
theme
,
theme
:
post
.
theme
,
city
:
post
ing
.
city
,
city
:
post
.
city
,
user
name
:
post
ing
.
user
name
,
user
:
post
.
user
,
date
:
post
ing
.
date
,
date
:
post
.
date
,
counts
:
0
,
counts
:
0
,
});
});
return
newPosting
;
return
newPosting
;
...
...
src/models/index.ts
View file @
71aa5b17
export
{
default
as
User
,
IUser
}
from
"
./user.model
"
;
export
{
default
as
User
,
IUser
}
from
"
./user.model
"
;
export
{
default
as
Posting
,
PostingType
}
from
"
./posting.model
"
;
export
{
default
as
Post
,
PostType
}
from
"
./post.model
"
;
export
{
default
as
Post
,
PostType
}
from
"
./post.model
"
;
src/models/post.model.ts
View file @
71aa5b17
import
{
model
,
Schema
,
Types
}
from
"
mongoose
"
;
import
{
Document
,
model
,
Schema
,
Types
}
from
"
mongoose
"
;
import
{
Posting
Type
}
from
"
.
/posting.model
"
;
import
{
Posting
}
from
"
.
"
;
export
interface
PostType
extends
PostingType
{
export
interface
PostType
{
date
?:
string
;
title
:
string
;
counts
:
number
;
text
?:
string
;
id
?:
string
;
theme
:
string
;
city
:
string
;
user
?:
Types
.
ObjectId
|
string
;
date
?:
Date
;
counts
?:
number
;
}
}
const
postSchema
=
new
Schema
<
PostType
>
({
const
PostSchema
=
new
Schema
<
PostType
>
({
title
:
{
type
:
String
},
title
:
{
theme
:
{
type
:
String
},
type
:
String
,
city
:
{
type
:
String
},
required
:
true
,
username
:
{
type
:
String
},
},
date
:
{
type
:
String
},
text
:
{
counts
:
{
type
:
Number
},
type
:
String
,
required
:
true
,
},
theme
:
{
type
:
String
,
},
city
:
{
type
:
String
,
},
user
:
{
type
:
Schema
.
Types
.
ObjectId
,
ref
:
"
User
"
,
},
date
:
{
type
:
Date
,
default
:
Date
.
now
,
},
counts
:
{
type
:
Number
,
},
});
});
export
default
model
<
PostType
>
(
"
Post
"
,
p
ostSchema
);
export
default
model
<
PostType
>
(
"
Post
"
,
P
ostSchema
);
src/models/posting.model.ts
deleted
100644 → 0
View file @
9fe5e544
import
{
model
,
Schema
}
from
"
mongoose
"
;
export
interface
PostingType
{
title
:
string
;
text
?:
string
;
theme
:
string
;
city
:
string
;
username
?:
string
;
date
?:
string
;
counts
?:
number
;
}
const
postingSchema
=
new
Schema
<
PostingType
>
({
title
:
{
type
:
String
,
required
:
true
,
},
text
:
{
type
:
String
,
required
:
true
,
},
theme
:
{
type
:
String
,
},
city
:
{
type
:
String
,
},
username
:
{
type
:
String
,
// username: travelreport.users.findOne({id: cookie.token._id(Schema.Tpyes.ObjectId)}).name,
},
date
:
{
type
:
Date
,
default
:
Date
.
now
,
},
counts
:
{
type
:
Number
,
},
date
:
{
type
:
Date
,
dafault
:
Date
.
now
,
},
counts
:
0
,
});
export
default
model
<
PostingType
>
(
"
Posting
"
,
postingSchema
);
src/routes/post.route.ts
View file @
71aa5b17
...
@@ -3,6 +3,6 @@ import { postCtrl, authCtrl } from "../controllers";
...
@@ -3,6 +3,6 @@ import { postCtrl, authCtrl } from "../controllers";
const
router
=
express
.
Router
();
const
router
=
express
.
Router
();
router
.
route
(
"
/
"
).
post
(
authCtrl
.
requireLogin
,
postCtrl
.
post
ing
);
router
.
route
(
"
/
"
).
post
(
authCtrl
.
requireLogin
,
postCtrl
.
post
Create
);
export
default
router
;
export
default
router
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment