访问Body Param NodeJS Express

时间:2018-04-16 19:03:15

标签: json node.js express

我有路线

router.post('/api/getSessionTimeOut', apiController.getSessionTimeOut);

这是我的控制器

function getSessionTimeOut(req, res) {

    res.send(req.body.session); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

    var options =
    {
        method: 'POST',
        url: 'http://api/json',
        body:
        {
            id: 1,
            method: 'get',
            params: [
                {
                    url: '/cli/global/system/admin/setting'
                }
            ],
            session: req.params.session
        },
        json: true
    };

    request(options, function (error, response, body) {
        if (error) throw new Error(error);
        console.log(body, response);
        res.send(response.result);
    });
};

通过邮递员

session body作为Red alert! Red alert!: TypeError: Cannot read property 'session' of undefined at getSessionTimeOut (/Users/doe/Desktop/express-app/controllers/api.js:50:23) at Layer.handle [as handle_request] (/Users/doe/Desktop/express-app/node_modules/express/lib/router/layer.js:95:5) at next (/Users/doe/Desktop/express-app/node_modules/express/lib/router/route.js:137:13) at Route.dispatch (/Users/doe/Desktop/express-app/node_modules/express/lib/router/route.js:112:3) at Layer.handle [as handle_request] (/Users/doe/Desktop/express-app/node_modules/express/lib/router/layer.js:95:5) at /Users/doe/Desktop/express-app/node_modules/express/lib/router/index.js:281:22 at Function.process_params (/Users/doe/Desktop/express-app/node_modules/express/lib/router/index.js:335:12) at next (/Users/doe/Desktop/express-app/node_modules/express/lib/router/index.js:275:10) at Function.handle (/Users/doe/Desktop/express-app/node_modules/express/lib/router/index.js:174:3) at router (/Users/doe/Desktop/express-app/node_modules/express/lib/router/index.js:47:12) at Layer.handle [as handle_request] (/Users/doe/Desktop/express-app/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/Users/doe/Desktop/express-app/node_modules/express/lib/router/index.js:317:13) at /Users/doe/Desktop/express-app/node_modules/express/lib/router/index.js:284:7 at Function.process_params (/Users/doe/Desktop/express-app/node_modules/express/lib/router/index.js:335:12) at next (/Users/doe/Desktop/express-app/node_modules/express/lib/router/index.js:275:10) at serveStatic (/Users/doe/Desktop/express-app/node_modules/serve-static/index.js:75:16) at Layer.handle [as handle_request] (/Users/doe/Desktop/express-app/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/Users/doe/Desktop/express-app/node_modules/express/lib/router/index.js:317:13) at /Users/doe/Desktop/express-app/node_modules/express/lib/router/index.js:284:7 at Function.process_params (/Users/doe/Desktop/express-app/node_modules/express/lib/router/index.js:335:12) at next (/Users/doe/Desktop/express-app/node_modules/express/lib/router/index.js:275:10) at expressInit (/Users/doe/Desktop/express-app/node_modules/express/lib/middleware/init.js:40:5) 的路线进行投放后

enter image description here

我一直在

import express from 'express'
import favicon from 'serve-favicon'
import path from 'path'
import bodyParser from 'body-parser'

// Controllers
import apiController from './controllers/api'

const router = express.Router();
const app = express();
const PORT = 3000;

//For public folder
app.use(express.static('public'))
app.use(router)
app.use('/images',express.static('images'))
app.use(favicon(path.join(__dirname,'public','favicon.ico')))
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

router.get('/', (req,res) => {
    res.send('Welcome to the backend provisioning daemon to program FortiManager')
});

// app.use( express.json());
app.use(express.urlencoded({extended: true}))
app.set('trust proxy', 'loopback');


//Fortinet
router.post('/api/getSessionTimeOut', apiController.getSessionTimeOut);
router.post('/api/login', apiController.login);

//Error handling function
app.use((err,req,res,next) => {
    console.error(err.stack)
    res.status(500).send(`Red alert! Red alert!: ${err.stack}`)
});

// app listen
app.listen(PORT, () => {
        console.log(`Your server is running on ${PORT}`)
    }
);

index.js

function getAccessToken() 
{
  var url = "https://gloapi.chinabrands.com/v2/user/login";
  var data = {
    "email": EMAILID,
    "password": PWD,
    "client_id": APIKEY
  }
  var payload = {
    "data": data,
    "signature": Utilities.base64Encode(data + SECRETKEY)
  }

  var options = {
    "method": "post",
    "contentType": "application/json",                 
    "payload": payload
  };
  var json = UrlFetchApp.fetch(url, options).getContentText();
  Browser.msgBox(json);
}

1 个答案:

答案 0 :(得分:1)

尝试移动

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

之后

const app = express();

为什么,因为在服务器上注册任何路由之前,您需要在服务器/应用程序上使用/注册middlewares。这将确保进入注册路由的每个请求首先通过body-parsers,并让body-parsers以指定的数据结构或格式构造请求数据。

希望有所帮助

由于