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

How to send formData from Angular 2 to nodejs?

我正在使用此代码:

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 在 this.request.body 上获得了 json { 用户名:'user',密码:'password' }。但是我需要 json 像 {fields: { username: 'user', password: 'password' } }

制作指定格式的对象,使用json.stringify将其制作成字符串并发送到node.js服务器。

如果您只想使用 url 编码形式,则不能。事实上,您的 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 应用程序中注册正确的解串器。例如快递:

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

application.use(bodyParser.json());

希望对你有帮助, 蒂埃里