Ошибка при попытке отобразить новую страницу после запроса на выборку в Express - PullRequest
0 голосов
/ 18 марта 2020

Проблема

Я настроил запрос HTTP-выборки со стороны клиента с некоторыми JSON данными (dataURL из холста), и я хочу иметь возможность доступа к нему со стороны сервера и затем визуализируйте новую страницу, которая отображает этот dataURL. Это только приложение Express (без клиентских платформ).

Однако я получаю сообщение об ошибке. Мне может показаться, что с данными JSON или способом их обработки что-то не так, но посмотрите на код.

В Safari это Unhandled Promise Rejection: SyntaxError: The string did not match the expected pattern.

В Chrome, это Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0

В Firefox это SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

Код

Клиентская сторона

У меня есть HTML холст, который Я преобразовал в dataURL и сохранил в JSON объект. Этот объект отправляется в sendData.

Если я избавлюсь от строки response.json(), я не получу ошибку. Но я хочу отобразить новую страницу с dataURL, отображаемым в теге абзаца.

function sendData(input) {
    fetch('/', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(input)
    })
    .then((response) => {
        response.json()
    })
}

//Saves dataURL as string
function saveData(input){
    var dataURL = input.toDataURL()
    data = { imageData: dataURL}
    sendData(data)
}

На стороне сервера

Если я избавлюсь от строки res.render('images'), я не получу ошибка, но, опять же, я не могу отобразить новую страницу. Кроме того, это может быть другой проблемой, но Express уже не отображает новую страницу. Регистрация req.body.imageData работает.

exports.submit_image = function (req, res, next) {
  console.log(req.body.imageData)
  res.render('images')
}

Маршруты

И на всякий случай это поможет, вот индекс. js в каталоге маршрутов

router.get('/', index.get_index)
router.post('/', index.submit_image)

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 21 марта 2020

Node.js автоматически обрабатывает отклоненные обещания, регистрируя их. Вы можете подавить это, используя следующий код. Взгляните на эту страницу для получения дополнительной информации об обещаниях.

window.addEventListener('unhandledrejection', event => {
     event.preventDefault()
}, false)
...