【问题标题】:How to send a NODE.JS post request from an Angular Project?如何从 Angular 项目发送 NODE.JS 发布请求?
【发布时间】:2020-10-30 15:10:12
【问题描述】:

我有一个使用 expressjs 连接到 SQL Server 的 NODE.JS api,我想在 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 请求运行良好,但是当我尝试直接从 Angular 应用程序运行 POST 请求时,我收到一条错误提示

无法获取 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? HeadersRequestOptions 已弃用
  • 我正在使用 Angular2 代码,在一些书籍和参考资料中找到了它。
  • 尝试在旧的 angular 2 stackblitz 上重现问题,因为您所拥有的似乎是正确的

标签: node.js angular api post


【解决方案1】:

这就是我通过 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; 
}

这里是另一个带有 observable 的例子

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 上的第一个答案之一。如果有点乱,我很抱歉 我希望我能帮助我的例子:)

【讨论】:

  • 我希望你不会介意我问承诺代码中的“this.config”是什么。 HttpConfig 也给我一个错误说“找不到名称 'HttpConfig'。”
  • 是的,我忘了提到,在我的包含注册函数的服务文件中,我在构造函数上方定义了我的 HttpConfig:config: HttpConfig = { headers: new HttpHeaders(),观察: “响应”};
  • 您是否检查了所有 URL 段是否匹配?也许您的帖子调用“api/users”或“api/user”的 URL 中有错字
猜你喜欢
  • 2019-03-07
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 2015-11-26
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多