Экспресс-анализатор тела: неожиданный токен # в JSON в позиции 0

1

Я пытаюсь вернуть данные пользователя из логина с помощью Polymer. Я работаю с Postman, но у меня проблемы с переводом в Polymer.

В Postman это возвращает объект JSON, но в Polymer он возвращается неопределенным.

Полимерный клиентский код [Подключение к серверу node.js]

<iron-ajax id="ajaxUser"
  url="http://localhost:8080/login"
  method="post"
  handle-as="json"
  content-type="application/json"
  headers='{"Access-Control-Allow-Origin": "*"}'
  params="[[params]]"
  on-response="saveUserCredentials"
  last-response="{{user}}"></iron-ajax>

...

<paper-input id="username"></paper-input>
<paper-input id="password"></paper-input>
<paper-button on-tap="loginUser"></paper-button>

...

loginUser() {
  this.params = {"username": this.$.username.value, "password": this.$.password.value};
  console.log(this.params); // logs this.params as populated JSON 
  let request = this.$.ajaxUser.generateRequest();
  request.completes.then(req => {
    console.log(req);       // no log
    console.log(this.user); // no log
  })
}

saveUserCredentials() {
  console.log(this.user);
}

сервер

// Middleware
app.options('*', cors(corsOptions)) // preflight OPTIONS; put before other routes
app.use(formData.parse(formBody))   // parse req.body data from 'express-form-data' module
app.use(bodyParser.json())
app.use(apiLimit)                   // Rate limit applied to all requests, can apply to specific endpoints
app.use((req, res, next) => {       // Enable Cross-Origin Resource Sharing (CORS)
  res.header("Access-Control-Allow-Origin", "*")
  res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT")
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, content-type, Accept, Authorization, x-api-key")
  next()
}) 

ошибка

SyntaxError: Неожиданный токен # в JSON в позиции 0
на JSON.parse()
в createStrictSyntaxError (C:\node_modules\body-parser\lib\types\json.js: 157: 10)
при разборе (C:\node_modules\body-parser\lib\types\json.js: 83: 15)
в C:\node_modules\body-parser\lib\read.js: 121:18
в invokeCallback (C:\node_modules\raw-body\index.js: 224: 16)
при выполнении (C:\node_modules\raw-body\index.js: 213: 7)
на IncomingMessage.onEnd(C:\node_modules\raw-body\index.js: 273: 7)
на IncomingMessage.emit(events.js: 159: 13)
at endReadableNT (_stream_readable.js: 1062: 12)
на process._tickCallback (internal/process/next_tick.js: 152: 19)

Изображение 174551

  • 1
    Это означает, что запрос содержит недопустимый JSON. Пожалуйста, опубликуйте скриншот полезной нагрузки запроса с сетевой панели DevTools.
  • 0
    ХОРОШО. Я загрузил изображение. URL запроса отличается, потому что я сократил строку для вопроса ...
Показать ещё 1 комментарий
Теги:
polymer

1 ответ

1
Лучший ответ

Проблема в том, что ваше тело POST пустое (как видно на снимке экрана вашей полезной нагрузки). Вы пытаетесь передать учетные данные пользователя через <iron-ajax>.params, который предназначен для увеличения параметров URL-запроса (обратите внимание, как URL-адрес запроса содержит учетные данные пользователя в качестве параметров).

Чтобы установить тело POST, установите <iron-ajax>.body (и измените this.params на this.body):

<iron-ajax body="[[body]]" ...>

демонстрация

  • 0
    Да, хорошо. Это также работает и является более "полимерным" способом сделать это. Спасибо!!
  • 0
    @KVNA Нет проблем :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню