2017-12-02 5 views
0

Express의 풋 라우트를 사용하여 책의 세부 정보를 수정하고 있습니다. 제목, 저자, 장르 등 세 가지 필수 입력란이 있습니다. 책의 기존 세부 정보를 편집하고 필드 중 하나를 제거하면 유효성 검사 오류가 뒤 따르지 않고 500 개의 서버 오류가 발생합니다. 방금 필요한 필드의 텍스트를 변경하려고하면 데이터베이스를 업데이트합니다. 다음은 개별 도서에 대한 나의 길 찾기 경로입니다.Express/Sequelize - PUT Route to Update 폼에서 500 서버 오류가 발생합니다.

// Get book detail + loans 
router.get("/details/:id", (req, res)=> { 
    const book = Book.findById(req.params.id); 
    const loans = Loan.findAll({where: {book_id: req.params.id}, include: [{ model: Patron}, {model: Book}]}); 

    Promise.all([book, loans]).then(function(data) { 

    res.render('book_detail', {book: data[0], loans: data[1]}); 
    }); 
}); 

/* POST update book. */ 
router.put("/details/:id", function(req, res, next){ 
    Book.findById(req.params.id).then(function(book){ 
    if(book) { 
     return book.update(req.body); 
    } else { 
     res.send(404); 
    } 
    }).then(function(book){ 
    res.redirect("/books/"); 
    }).catch(function(error){ 
     if(error.name === "SequelizeValidationError") { 
     var book = Book.build(req.body); 
     book.id = req.params.id; 
     res.render("books/details/" + book.id, {book: book, errors: error.errors}) 
     } else { 
     throw error; 
     } 
    }).catch(function(error){ 
     res.send(500, error); 
    }); 
}); 

이 내 PUG 페이지의 형식은 문자열에 PUT 호출하는 방법을 재정의 패키지를 --using 모습입니다 :

extends layout 

block content 
    h1 Book: #{title} 

    include error 

    form(action='/books/details/' + book.id + "?_method=PUT", method="post") 
    P 
     label(for='title') Book Title: 
     input(id='title' name='title' width="175" type='text' value=book.title) 
    p 
     label(for='author') Author: 
     input(id='author' name='author' type='text' value=book.author) 
    p 
     label(for='genre') Genre: 
     input(id='genre' name='genre' type='text' value=book.genre) 
    p 
     label(for='genre') First Published: 
     input(id='first_published' name='first_published' type='text' value=book.first_published) 
    p 
     input(type='submit', value='Update') 

어떤 아이디어?

+0

실제 오류 메시지를 추가하십시오. 나는. 'console.log (오류);'. – MikaS

+0

안녕하세요, 제가 받고있는 유일한 오류는 500입니다 - 내부 서버 오류 –

+0

브라우저에서 의미합니까? 나는'res.send (500, error);'바로 위에 언급 한 console.log를 추가하면 터미널에 나타나는 오류 메시지를 생각하고있다. – MikaS

답변

0

router.postrouter.put이 다른 경우 올바른 유형의 요청을 보내야합니다. 귀하의 페이지에서 POST 요청을 보내면 router.post이 아닌이 요청은 router.put이 아니므로이 오류는 router.post에서 발생합니다. PUT은 html 형식으로 사용할 수 없으므로 책을 업데이트하는 다른 방법을 생각해야합니다.

+0

답장을 보내 주셔서 감사합니다. form- https://github.com/expressjs/method-override –