Вызывать комментарии пользователей с ответами, используя экспресс и сиквелизировать с обещанием - PullRequest
0 голосов
/ 21 октября 2018

Я новичок в экспрессе и секвелизе.Я пытаюсь вызывать комментарии пользователей с ответами, используя обещание от экспресс-маршрутизатора, но это не работает, пожалуйста, помогите мне решить эту проблему.

Сначала я использовал var loopIndex = 0 для проверки длины записи, зарегистрированной пользователями.Работает нормально.

1.Детали маршрутизатора

router.get('/show', function(req, res){
models.post.findAll({
  order: [["createdAt", "DESC"]]
})
.then(function(result){
  var loopIndex = 0
  for(let post of result){
    models.post.find({
      include: {model: models.reply, where: {postId: post.id}}
    })
    .then(function(result2){
      if(result2){
        post.replies = result2.replies
      }

    loopIndex++
    if(loopIndex === result.length){
      res.render('show', {
        posts: result
      })
    }
    })
  }
})
.catch(function(err){
    console.log(err)
})})

2.файл ejs

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <h1>Add comments</h1> <hr>
  <form action="/create" method="POST">
    <table style="margin-bottom:50px;">
      <tr>
        <td>
          <input type="text" name="inputTitle" placeholder="Title.">
        </td>
      </tr>
      <tr>
        <td>
          <input type="text" name="inputWriter" placeholder="Author.">
        </td>
      </tr>
      <tr>
        <td>
          <input type="submit" value="Submit">
        </td>
      </tr>
    </table>
  </form>
  <% for(let post of posts) { %>
  <table style="border: solid black 1px; margin-bottom:30px;">
    <tr>
      <td>Title</td>
      <td>Author</td>
      <td>Date</td>
    </tr>
    <tr>
      <td><%= post.title %></td>
      <td><%= post.writer %></td>
      <td><%= post.createdAt %></td>
      <td><button ><a href="/edit/<%=post.id%>">Edit</a></button></td>
      <td><button ><a href="/delete/<%=post.id%>">Delete</a></button></td>
    </tr>
    <tr>
      <td><hr></td>
    </tr>
    <form action="/reply/<%=post.id%>" method="post">
      <tr>
        <td><input type="text" name="replyWriter" placeholder="Author"></td>
        <td><input type="text" name="replyContent" placeholder="Description"></td>
      </tr>
      <tr>
        <td><input type="submit" value="submit"></td>
      </tr>
    </form>
  </table>
    <% if(post.replies){for(let reply of post.replies)
      { %>
      <tr>
        <td><%= reply.dataValues.writer %></td>
        <td><%= reply.dataValues.content %></td>
      </tr>
      <% } %>
    <% } %>
  <% } %>
</body>
</html>

Я пытался создавать коды, используя обещание.но это не работает.

3.Модифицированные коды, использующие обещание

var post_reply = new Promise(function(result){
models.post.findAll({
  order: [["createdAt", "DESC"]]
})
.then(function(result){
  for(let post of result){
    models.post.find({
      include: {model: models.reply, where: {postId: post.id}}
    })
    .then(function(result2){
      if(result2){
        post.replies = result2.replies
      }
    })
  }
})
return result
})

router.get('/show', function(res, req){
post_reply.then(function(result){
  res.render('show', {
   posts: result
  })
}).catch(function(err) {
    console.log(err)
})
})

Есть ли проблема для цикла или вложенной функции?

...