获取“第一个参数必须是字符串或缓冲区”错误

时间:2017-05-29 14:31:48

标签: node.js express post request

// call the packages
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var figlet = require('figlet');
var querystring = require('querystring');
var http = require('http');
var fs = require('fs');
var request = require('request');

// configure app to use bodyParser()
// this will let app get the data from a POST
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.text());

// set port
var port = process.env.PORT || 8082;

// get an instance of the express Router
var router = express.Router();


// middleware to use for all requests
router.use(function(req, res, next) {

    // do logging
    console.log('UnitGener router invoking');
    // go to the next routes and don't stop here
    next();
});

// test route to make sure everything is working (accessed at GET http://localhost:8082/api)
router.get('/status', function(req, res) {
    res.json({
        message: 'UnitGener is ready to work!'
    });
});


//noinspection JSUnresolvedFunction
router.route('/function')

    .post(function(req, res) {
        console.log(req.body);
        var formatted = req.body;


        request.post({
            headers: {
                'content-type': 'application/x-www-form-urlencoded'
            },
            url: 'http://localhost:5000/generate',
            body: formatted
        }, function(error, response, body) {
            console.log(body);
        });

    });

app.use('/api', router);
app.listen(port);
});

这是我使用给定配置创建POST路由的完整代码,然后我在post方法中调用另一个post路由。但我得到“抛出新的TypeError('第一个参数必须是字符串或缓冲区');”这个错误。我做了一些谷歌搜索并做了一些改变,他们没有工作,仍然发现很难指出错误。我改变了身体:格式化为body:formatted.toString()也没有用。请给我一些建议来解决这个问题。这对我来说是一个巨大的帮助。

先谢谢

3 个答案:

答案 0 :(得分:5)

错误发生在请求调用中。要正确提交表单,请使用

    request.post({
        url: 'http://localhost:5000/generate',
        form: formatted
    }, function(error, response, body) {
        console.log(body);
    });

我鼓励您使用npm模块request-promise-native: https://github.com/request/request-promise-native https://www.npmjs.com/package/request-promise

var rp = require('request-promise');

var options = {
    method: 'POST',
    uri: 'http://api.posttestserver.com/post',
    body: {
        some: 'payload'
    },
    json: true // Automatically stringifies the body to JSON 
};

rp(options)
    .then(function (parsedBody) {
        // POST succeeded... 
    })
    .catch(function (err) {
        // POST failed... 
    });

答案 1 :(得分:3)

你的身体应该是Buffer try this,json:true in request option

 request.post({
        headers: {
            'content-type': 'application/x-www-form-urlencoded'
        },
        url: 'http://localhost:5000/generate',
        body: formatted,
        json:true
    }, function(error, response, body) {
        console.log(body);
    });

答案 2 :(得分:1)

你为什么写作:

router.route('/function')
  .post(function(req, res) {

尝试:

router.post('/function', function(req, res) {