如何将formData从Angular 2发送到nodejs?

时间:2016-01-14 10:18:28

标签: javascript node.js http-headers xmlhttprequest angular

我正在使用此代码:

var creds = "username=" + 'user' + "&password=" + 'password';
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
http.post('http://localhost:3000/', creds, {
  headers : headers
})
    .map(res => res.json())
    .subscribe(
        data => this.logData(data),
        err => this.logError(err),
    () => console.log('Quote Complete')
);

NodeJs获得了json {用户名:'用户',密码:'密码'在this.request.body上。但我需要json,如{fields:{用户名:'用户',密码:'密码' }}

2 个答案:

答案 0 :(得分:1)

创建指定格式的对象,使用json.stringify从中生成一个字符串并将其发送到node.js服务器。

答案 1 :(得分:1)

如果您只想使用网址编码表单,则无法使用。实际上,您的Node应用程序会将字符串内容(username=user&password=somepwd)转换/反序列化为一个简单(平面)的JavaScripty对象。

要在Node应用程序中获得所需数据(特定格式),您需要切换到请求有效负载的application/json内容类型,如下所述:

var creds = {
  fields: {
    username: 'user',
    password: 'password'
  }
}

var headers = new Headers();
headers.append('Content-Type', 'application/json');
http.post('http://localhost:3000/', JSON.stringify(creds), {
  headers : headers
})
  .map(res => res.json())
  .subscribe(
    data => this.logData(data),
    err => this.logError(err),
    () => console.log('Quote Complete')
  );

不要忘记在Node应用程序中注册正确的解串器。例如使用Express:

var express = require('express');
var application = express();

application.use(bodyParser.json());

希望它可以帮到你, 亨利