Как читать данные в node.js app.js из машинописи IONIC через REST API? - PullRequest
0 голосов
/ 03 октября 2018

Мой service.ts выглядит так:

import { Injectable } from '@angular/core';
import {Http, Headers} from '@angular/http';
import 'rxjs/add/operator/map';

/*
  Generated class for the PeopleSearch provider.

  See https://angular.io/docs/ts/latest/guide/dependency-injection.html
  for more info on providers and Angular 2 DI.
*/
@Injectable()
export class PeopleSearch {
  data: {name:'morr', age: 19, email:'mor@mo.com' };
  apiurl: "http://localhost:3082";

  constructor(public http: Http) {
    console.log('Hello PeopleSearch Provider');

  }

  load1() {
    return new Promise(resolve => { 
      let headers = new Headers();

      this.http.post('http://localhost:3082/users/u/',JSON.stringify(this.data),{ headers: headers })
        .map(res => res.json())
        .subscribe(data => {
          //console.log(data.user1);


          resolve(data);
        });
    });
  }  

А мой app.js выглядит так:

const express= require('express')
const app= express();
const morgan= require('morgan')
const mysql= require('mysql')
var cors = require('cors');
app.use(cors());

const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); 



const connection= mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'test'
})

app.use(morgan('combined'))


app.use(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
    res.header("Access-Control-Allow-Methods", "GET, PUT, POST");
    if ('OPTIONS' === req.method) {
        res.status(204).send();
    }
    else {
        next();
    }
});
app.post("/users/u", (req, res) => {
    const name=req.body.name
    const age= req.body.age
    const email= req.body.email
    const querystring="insert into users values(?,?,?,?)"
    connection.query(querystring, [11,name,age,email],(err,results,fields)=>{
        console.log("success sql post")
        res.end()        
    })
  })

app.listen(3082, () => {
    console.log("Server is up and listening on 3082...")
  })

Я не понимаю, где я совершенно не прав.Если я записываю данные, жестко закодированные во всех переменных, возрасте и имени пользователя, то сообщение req выполняется успешно.Но когда я использую req.body, чтобы получить данные, публикуемые машинописным шрифтом, тогда я думаю, что он не читает правильно.

Может кто-нибудь подсказать, что использовать или как использовать req.body, чтобы получить данные в переменных и сохранитьэто в запросе ??

1 Ответ

0 голосов
/ 03 октября 2018

Вы не правильно определили свои данные в службе PeopleSearch.Внимательно посмотрите на верхнюю часть класса PeopleSearch.Это:

@Injectable()
export class PeopleSearch {
  data: {name:'morr', age: 19, email:'mor@mo.com' };
  apiurl: "http://localhost:3082";

Должно быть (обратите внимание на '=' вместо ':'):

@Injectable()
export class PeopleSearch {
  data = {name:'morr', age: 19, email:'mor@mo.com' };
  apiurl = "http://localhost:3082";

Синтаксис Typescript для определения свойства в классе:

[name]:[type] = [value]

В вашем случае вы определили имя и тип, но не значение.По сути, вы определили данные свойств и задали тип, так что только объекты, точно совпадающие со свойствами и значениями, которые вы определили, могут быть установлены на него.

...