node.js嵌套的http req对象undefined - bodyParser.urlencoded({extended:true}不工作

时间:2017-05-17 09:24:05

标签: javascript angularjs json node.js rest

为什么是嵌套对象

  

kategorien:[对象]

我的node.js应用程序中未定义?

以下是来自katalogCtrl中的console.log的控制台日志:

var str = 'da(dd) | dasd(dsa) | dad(asdf) (fad(dfad) | dfasd |dada(dafs)) | adfs(daf)'

str.replace(/([\|])/g,'@'); --- not working.

server.js:

     { _id: '591c08ccb673741787b123c2',
  bezeichnung: 'test',
  __v: 0,
  risiken: [ { bezeichnung: 'Naturgefahren', kategorien: [Object] } ] }

katalogCtrl:

app.use(function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With, application/json');
    res.setHeader('Access-Control-Allow-Credentials', true);
    res.setHeader("Content-Type", "application/json");
    next();
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

router.route('/katalog/update').post(
    authstrategies.authJWToken,
    authstrategies.check_if_is_admin,
    katalogCtrl.update_katalog);

这里来自客户端的呼叫(角度2):

exports.update_katalog = function (req, res) {
    console.log(req.body);
}

来自客户端的console.log:

    let headers = new Headers({ 'Content-Type': 'application/json' });
          headers.append('Authorization', localStorage.getItem('token'));
          let options = new RequestOptions({ headers: headers });

let body = JSON.stringify(katalog);
            console.log(body);
            this.http
                .post(this.CONSTANTS.APIURL+'/katalog/update', body, options)
                .toPromise().
            then(value => {
                console.log(value);
                })
                .catch();

2 个答案:

答案 0 :(得分:2)

console.log()只会在打印内容时将对象递归到某个深度(2)。

您可以使用util.inspect()调整深度:

const util = require('util');
...
console.log(util.inspect(req.body, { depth : null }));

或(使用6.4或更高版本的节点)set a default depth(这可行,因为console.log()使用了util.inspect()

require('util').inspect.defaultOptions.depth = null;

或者输出JSON:

console.log('%j', req.body);

答案 1 :(得分:1)

risiken: [ { bezeichnung: 'Naturgefahren', kategorien: [Object] } ] }

<kategorien: [Object] kategorien的{​​{1}}值不是undefined,实际上是object,可能包含正确的值。

尝试

console.log(body.risiken[0].kategorien);