Неожиданный токен U в JSON в позиции 0 - PullRequest
0 голосов
/ 09 апреля 2019

У меня проблема со стеком MEAN.

У меня есть угловая форма с хорошими значениями для создания БД с идентификатором компании с Node Express в бэкэнде.У меня ошибка, что JSON в узле не определен.но я не понимаю почему?

app.js

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const userboRoutes = require('./routes/userbo');
const companyRoutes = require('./routes/company');
const path = require('path');

mongoose.connect('mongodb://127.0.0.1/aya', {useNewUrlParser: true})
  .then(() => {
    console.log('Successfully connected to MongoDB AYA!');
  })
  .catch((error) => {
    console.log('Unable to connect to MongoDB! AYA');
    console.error(error);
  });

const app = express();

app.use((req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');
    next();
  });
app.use(bodyParser.json());

app.use('/api/company', companyRoutes);
app.use('/api/authbo', userboRoutes);
module.exports = app;

маршруты \ company.js

const express = require('express');
const router = express.Router();
const companyCtrl = require('../controllers/company');
const Company = require('../models/company');

router.post('/', companyCtrl.createCompany);
router.get('/:id', companyCtrl.getOneCompany);
router.put('/:id',  companyCtrl.modifyCompany);
router.delete('/:id', companyCtrl.deleteCompany);
router.get('/',  companyCtrl.getAllCompany);

module.exports = router;

контроллер \ company.js

const Company = require('../models/company');
const fs = require('fs');

exports.createCompany = (req, res, next) => {


    req.body.company = JSON.parse(req.body.company);

    const company = new Company({
        coid:req.body.company.coid,
        coname: req.body.company.coname,
        service: req.body.company.service,
        address: req.body.company.address,
        state: req.body.company.state,
        zip: req.body.company.zip,
        city: req.body.company.city,
        country: req.body.company.country,
        size: req.body.company.size,
        domain: req.body.company.domain,
        duns: req.body.company.duns,
        tid1: req.body.company.tid1,
        numid1: req.body.company.numid1,
        tid2: req.body.company.tid2,
        numid2: req.body.company.numid2,
        tid3: req.body.company.tid3,
        numid3: req.body.company.numid3,
        bankname: req.body.company.bankname,
        bicswift: req.body.company.bicswift,
        iban: req.body.company.iban,
        datecreat: req.body.company.datecreat,
        bogid: req.body.company.bogid
    });

    company.save().then(
        () => {
            res.status(201).json({
                message: 'Post saved successfully!'
            });
        }
    ).catch(
        (error) => {
            res.status(400).json({
                error: error
            });
        }
    );

};

Угловой компонент:

this.companyService.CreateCoData(company).then(
      () => {
        this.CreateCoForm.reset();
        this.router.navigate(['home']);
      },
      (error)=> {
        this.loading = false;
        this.errorMessage = error.message;
      }
    );

Фирменный сервис

import { Router } from '@angular/router';
import { Company } from './../models/company.model';
import { HttpClient, HttpClientModule } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';

export class CompanyService {

  constructor(private router: Router,
    private http: HttpClient) {  }
  company: Company[];
  companySubject = new Subject<Company[]>();
  public company$ = new Subject<Company[]>();

CreateCoData(company: Company) {
    return new Promise((resolve, reject) => {
      this.http.post('http://localhost:3000/api/company', company).subscribe(
        (response) => {
          resolve(response);
        },
        (error) => {
          reject(error);
        }
      );
    });
  }

Я получил эту ошибку:

SyntaxError: Unexpected token u in JSON at position 0
    at JSON.parse (<anonymous>)
    at exports.createCompany (E:\MEAN\BACKEND\controllers\company.js:7:29)

Или в полезной нагрузке Request (сеть инструментов Chrome dev) json верен.Request Payload Я не понимаю, почему требование json в undefined?

Пожалуйста, помогите мне понять:)

ОБНОВЛЕНИЕ Просто работать сПОСТМАН: POSTMAN

и обновите company.js вот так

exports.createCompany = (req, res, next) => {

   console.log( req.body);
  //  req.body.company = JSON.parse(req.body.company);

    const company = new Company({
        coid:req.body.coid,
        coname: req.body.coname,
        service: req.body.service,
        address: req.body.address,
        state: req.body.state,
        zip: req.body.zip,
        city: req.body.city,
        country: req.body.country,
        size: req.body.size,
        domain: req.body.domain,
        duns: req.body.duns,
        tid1: req.body.tid1,
        numid1: req.body.numid1,
        tid2: req.body.tid2,
        numid2: req.body.numid2,
        tid3: req.body.tid3,
        numid3: req.body.numid3,
        bankname: req.body.bankname,
        bicswift: req.body.bicswift,
        iban: req.body.iban,
        datecreat: req.body.datecreat,
        bogid: req.body.bogid
    });

    company.save().then(
        () => {
            res.status(201).json({
                message: 'Post saved successfully!'
            });
        }
    ).catch(
        (error) => {
            res.status(400).json({
                error: error
            });
        }
    );

};

Я думаю, что проблема в неправильном формате данных.Но как правильно его установить?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Итак, я нашел РЕШЕНИЕ ^^ Такой гордый ** ((^ o ^) /) **

После обновления в первом посте я вижу, что проблема связана с ошибкой типа контента.

Так что в ** сервисе компании ** (Angular) я добавляю это в Force JSON Type!

import { HttpClient, HttpClientModule,** HttpHeaders** } from '@angular/common/http';
httpOptions = {
    headers: new HttpHeaders({
      'Content-Type':  'application/json',

    })
  };
CreateCoData(company: Company) {
    return new Promise((resolve, reject) => {
      this.http.post('http://localhost:3000/api/company', company, **this.httpOptions**).subscribe(
        (response) => {
          resolve(response);
        },
        (error) => {
          reject(error);
        }
      );
    });
  }

enter image description here

0 голосов
/ 09 апреля 2019

Функция .save возвращает обратный вызов и не обещание .

Так что если вы измените ваш обработчик запросов следующим образом, он будет работать:

const Company = require('../models/company');
const fs = require('fs');

exports.createCompany = (req, res, next) => {


    req.body.company = JSON.parse(req.body.company);

    const company = new Company({
        coid:req.body.company.coid,
        coname: req.body.company.coname,
        service: req.body.company.service,
        address: req.body.company.address,
        state: req.body.company.state,
        zip: req.body.company.zip,
        city: req.body.company.city,
        country: req.body.company.country,
        size: req.body.company.size,
        domain: req.body.company.domain,
        duns: req.body.company.duns,
        tid1: req.body.company.tid1,
        numid1: req.body.company.numid1,
        tid2: req.body.company.tid2,
        numid2: req.body.company.numid2,
        tid3: req.body.company.tid3,
        numid3: req.body.company.numid3,
        bankname: req.body.company.bankname,
        bicswift: req.body.company.bicswift,
        iban: req.body.company.iban,
        datecreat: req.body.company.datecreat,
        bogid: req.body.company.bogid
    });

    company.save(function (err, newCompany) {
        if (err) {
            return res.status(400).json({ error: error });
        }

        return res.status(201).json(newCompany);
    });
};
...