【问题标题】:Angular 5 Post data with Nodejs - Wrong format of bodyAngular 5 Post data with Nodejs - 错误的正文格式
【发布时间】:2018-06-19 14:02:40
【问题描述】:

我使用 nodejs 作为 Angular 5 应用程序的后端。当我使用 http 发布请求发布数据时,它以错误的形式出现在 nodejs 中(值作为属性)- 这是我的 Angular 5 服务代码 -

login(email: string, password: string) {
    let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
    let options = new RequestOptions({ headers: headers });
    let body = { EmailAddress: email, Password: password };

    return this.http.post('http://localhost:3000/api/user/login', body, options )
        .map((response: Response) => {
            let user = response.json();
            if (user && user.token) {
                localStorage.setItem('currentUser', JSON.stringify(user));
            }
        });
}

这是 Node API - 在正文中,我得到了作为属性的价值

app.post('/api/user/login', urlencodedBodyparser, function (req, res) {
    console.log(req.body);
    User.find({ "EmailAddress": req.body["EmailAddress"], "Password": req.body["Password"] }, function (err, users) {
        console.log(users.length);
        if (err != null) {
            sendError(err, res);
        }
        if (users != null) {
            var count = users.length;
            if (count > 0) {
                response.data = users[0];
                res.json(response);
            }
            else {
                sendError({ message :'No user found'}, res);
                console.log("Login Failed");
            }
        }
        else {
            sendError(err, res);
        }
    })
});

正文解析器的代码 -

var bodyParser = require('body-parser');

var urlencodedBodyparser = bodyParser.urlencoded({extended: false });

app.use(urlencodedBodyparser);

【问题讨论】:

    标签: javascript node.js angular angular5


    【解决方案1】:

    尝试将标头内容类型更改为 json

    应用程序/json

    像这样:

        options() {
            const headers = new Headers({
                'content-type': 'application/json'
            });
            const options = new RequestOptions({ headers: headers });
    
            return options;
        }
    
    
    
    
       login(): Observable<any> {
            return this.http.post('http://localhost:3000/api/user/login', this.options()).
                map((res: Response) => res.json());
        }
    

    【讨论】:

    • @amethianil 如果您使用它来解决您的问题,请投票支持该响应。
    【解决方案2】:

    需要使用body-parser中间件https://github.com/expressjs/body-parser
    这里有更多信息What does body-parser do with express?
    尝试使用这个:

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended: false}));
    

    【讨论】:

    • 我正在使用正文解析器 - 请检查我是否添加了它。让我知道我做错了什么
    • 检查我的答案
    • 您尝试过@MedMANS 所说的吗?将标头更改为 json ?
    • 我同时使用了 json 和 urlencoded 解析器,但无法正常工作。当我使用 urlencoded 解析器时,它从邮递员那里工作正常,但在使用 urlencoded 内容类型从 angular 5 代码调用相同的 api 时无法正常工作。所以认为我在 angular 中遗漏了一些东西。请帮忙
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2018-11-22
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    相关资源
    最近更新 更多