Как отправить запрос NODE.JS от проекта Angular? - PullRequest
1 голос
/ 10 июля 2020

У меня есть NODE.JS api, использующий expressjs, который подключается к SQL серверу, и я хочу использовать его в проекте angular. Я использую два файла: файл маршрута и файл контроллеров. Мой файл маршрута выглядит следующим образом:

module.exports = (app) => {
    const UsrContrllr = require('../Controllers/users.controllers');

    //1. GET ALL USERS
    app.get('/api/users', UsrContrllr.func1);

    
    //2. POST NEW USER
    app.post('/api/user/new', UsrContrllr.func2);
};

И мой файл контроллеров приведен ниже:

const mssql = require('mssql');

exports.func1 = (req, res) => 
{
    // Validate request
    console.log(`Fetching RESPONSE`);
    // create Request object
    var request = new mssql.Request();
    // query to the database and get the records
    const queryStr = `SELECT * FROM USERS`;
    request.query(queryStr, function (err, recordset) {
        if (err) console.log(err)
        else {
            if (recordset.recordset.toString() === '') {
                res.send('Oops!!! Required data not found...');
            }
            else {
                // send records as a response
                res.send(recordset);
            }
        };
    });
};

exports.func2 = (req, res) =>
{
     // Validate request
     console.log(`INSERTING RECORD ${req}`);
     // create Request object
     var request = new mssql.Request();
     // query to the database and get the records
     const queryStr = `INSERT INTO GDUSERS (USERCODE, PASSWORD, LANGUAGE, USERCLASS, FIRSTNAME, LASTNAME, CONTACTNO) VALUES ('${req.body.usercode}', '${req.body.password}', 'EN', '0', '${req.body.firstname}', '${req.body.lastname}', '${req.body.contactno}');`;
     request.query(queryStr, function (err, recordset) {
         if (err) console.log(err)
         else {
             if (recordset.recordset.toString() == '') {
                 res.send('Oops!!! Required data not found...');
             }
             else {
                 // Send records as response
                 res.send(recordset);
             }
         };
    });
};

Запрос GET работает хорошо, но когда я пытаюсь запустить запрос POST непосредственно из приложение angular, я получаю сообщение об ошибке:

Cannot GET URL / api / user / new

Код angular в моем проекте angular :

signup() {
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });

    console.log(this.user); //User details come from a form

    this.http.post(“URL", this.user, options)
    .subscribe( 
    (err) => {
        if(err) console.log(err);
        console.log("Success"); 
    });
  }

Я не уверен, правильный ли код angular, который я использую, и я не знаю, где я ошибаюсь. Как точно отправить HTTP-запрос POST из проекта Angular?

1 Ответ

1 голос
/ 10 июля 2020

это то, как я обрабатывал регистрацию пользователей с помощью вызовов http.post. Мой подход немного отличается при регистрации пользователя, потому что я использую обещание вместо наблюдаемого (которое я обычно использую для своих вызовов обслуживания). но я покажу вам оба пути.

createUser(user: User): Promise < string > {
  const promise = new Promise < string > ((resolve, reject) => {
   const userForPost = this.createUserForPost(user);
    this.http.post(environment.backendUrl + '/api/user/signup', userForPost, this.config).toPromise < HttpConfig > ()
    .then(createdUser => {
    }).catch(error => {
      console.log(error);
    });
});
 return promise; 
}

вот еще один пример с наблюдаемым

createForumPost(forumPost: ForumPost) {
 this.http.post < { message: string, forumPostId: string } > (environment.backendUrl + '/api/forumPosts', forumPost).subscribe((responseData) => {
  const id = responseData.forumPostId;
  forumPost.id = id;
 });
}

Я определил свой URL где-то еще, а затем просто использую environment.backedUrl + ' path ', чтобы определить мой путь (такой же, как путь в вашем внутреннем контроллере)

это один из моих первых ответов здесь, на SO. Извините, если это немного запутано, надеюсь, я смог помочь с моими примерами :)

...