Теперь я более или менее решаю свою проблему!
Вот как я это решил. Вот мой fan.json (извините, не очень хороший формат после того, как я его протестировал и много раз переписывал)
{"comments":[
{"name":"Anna","message":"I love your show last summer in Stockholm! Best summer concert I've been to!"},
{"name":"Jason","message":"This is War is the best album I've ever bought, I can't get tired of listening to it all the time."},
{"name":"Hansel","message":"When are you guys coming to Germany again?"},{"name":"Ash","message":"My favorite song is Up in the Air. It always makes me happy and wanna dance!"}]}
Сначала я создал шаблон в fan.ejs
<section class="content-section container">
<h2>Dear fans, we'd love to hear from you!</h2>
<% fans.comments.forEach((comment) => { %>
<p class="name"><%= comment.name%></p>
<p class="message"><%= comment.message%></p>
<% }) %>
<div id="commentDom">
</div>
</section>
<div class="comment">
<label for="full-name">Name</label>
<input id="full-name" name="full-name" type="text"/>
<label for="message">Comment</label>
<textarea id="message" name="message"></textarea>
<button class="btn btn-primary" value="submit">Submit</button>
</div>
затем я написал эту часть в файле fan.js (это еще не все, но я просто хочу подчеркнуть ту часть, которая взаимодействует с server.js
document.querySelector('button').addEventListener('click', (e)=> {
if (name.trim() === '' || message.trim() === '' ) {
return
}
let commentObj = {
name: name,
message: message
}
fetch('/fans', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify(commentObj)
}).catch((error) => {
console.log(error)
})
generateDom(name, message)
removeInput()
})
Затем я записал их в server.js, так что новая информация должна быть передана в мой существующий файл fan.json, а затем переписана.
app.post('/fans', (req, res) => {
fs.readFile('fans.json', (error, data)=>{
if (error) {
res.status(500).end()
} else{
const fansObj = JSON.parse(data)
fansObj.comments.push(req.body)
fs.writeFile('fans.json', JSON.stringify(fansObj), (error) =>{
if (error){
console.log(error)
} else{
console.log('write successfully!')
}
})
}
})
})
После этого я обнаружил, что должен обновлять свою страницу вручную, чтобы получать обновления, когда я нажимал кнопку. Я погуглил, и мне кажется, что я должен использовать websockets или socket.io для решения этой проблемы, которая пока мне не известна. Поэтому я решил использовать простой способ, создав две функции, одна из которых генерируется в моем файле ejs, который находится в разделе "commentDom" после исходного раздела комментариев. Другой способ - удалить входную msg в области ввода, я удаляю msg в fan.js, а также в fan.ejs (let them = '') после нажатия кнопки, поэтому мы можем создать приятная немедленная обратная связь с пользователем. Конечно, если они обновят браузер, они смогут увидеть «реальный» рендеринг со стороны сервера.
Конечно, я знаю, что в реальном мире будет задействовано больше вещей, таких как базы данных и т. Д. Я с нетерпением жду, чтобы узнать об этом позже. : D