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

// 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); }); 

这里是我完成的代码,用给定的configuration创buildPOST路由,然后我在post方法中调用另一个post路由。 但我得到“抛出新TypeError('第一个参数必须是一个string或缓冲区');” 这个错误。 我做了一些谷歌发现,也做了一些改变,非工作,仍然觉得很难指出错误。 我改变了正文:格式化为body:formatted.toString()也没有工作。 请给我一些build议,找出答案。 这对我来说是一个巨大的帮助。

提前致谢

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

  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... }); 

预计你的身体是Buffer试试这个,json:true请求选项

  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); }); 

你为什么写:

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

尝试:

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