Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mocha Tests-SuperAgent-如何发送文本正文而不是JSON?_Node.js_Express_Mocha.js_Superagent - Fatal编程技术网

Node.js Mocha Tests-SuperAgent-如何发送文本正文而不是JSON?

Node.js Mocha Tests-SuperAgent-如何发送文本正文而不是JSON?,node.js,express,mocha.js,superagent,Node.js,Express,Mocha.js,Superagent,我正在使用SuperAgent测试Node/Express REST API 使用.send,正文内容将自动转换为JSON。我只想发送纯文本。以下是一个例子: request.post('localhost:3000/api/compile' ) .send('my example text that gets converted to JSON') .set('Content-Type', 'application/x-www-form-urlencoded')

我正在使用SuperAgent测试Node/Express REST API

使用.send,正文内容将自动转换为JSON。我只想发送纯文本。以下是一个例子:

request.post('localhost:3000/api/compile' )
        .send('my example text that gets converted to JSON')
        .set('Content-Type', 'application/x-www-form-urlencoded')
我已尝试更改内容类型标题,但仍发送了一个对象

如何强制SuperAgent仅使用纯文本


更新1:Adding.type('form')仍然默认为JSON

request.post('localhost:3000/api/compile' )
        .type('form')
        .send('my example string')
        .set('Authorization', un+':'+key)
         //.set('Content-Type', 'application/x-www-form-urlencoded')
        .end(function(err, res){
                res.should.have.status(200);
                done();
        });
这使-

 object
{ 'my example string': '' }

更新2:添加后端代码。这能简单地表达吗

app.js

var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var users = require('./routes/users');
var api = require('./routes/api');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);
app.use('/api', api);
路线:

    router.post('/compile', function(req, res) {
      console.log(typeof(req.body));
      console.log(req.body);

      res.send('respond with a resource');
      res.end();

});

解决方案-删除BodyParser:

var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var users = require('./routes/users');
var api = require('./routes/api');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(favicon());
app.use(logger('dev'));
//app.use(bodyParser.json());
//app.use(bodyParser.urlencoded());

app.use (function(req, res, next) {
    var data='';
    req.setEncoding('utf8');
    req.on('data', function(chunk) {
        data += chunk;
    });
    req.on('end', function() {
        req.rawBody = data;
        next();
    });
});

app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);
app.use('/api', api);
使用
.type('form')
表示您已经有
x-www-form-urlencoded
格式的数据

request.post('localhost:3000/api/compile')
  .type('form')
  .send('username=bob')
。x-www-form-urlencoded还有一些其他方便的变体


关于
text/plain
application/x-www-form-urlencoded
,您的问题的描述与代码有冲突,但是如果您真的想发送纯文本,请键入('text/plain')

非常感谢您的评论。我尝试添加.type('form'),但结果相同。我尝试了许多不同的方法,同时将内容类型设置为文本。请查看上面的编辑。请显示服务器端代码。我想它会在那里自动解码。@PeterLyons-我已经添加了Express后端-这是默认设置。我还添加了示例路线。这可能就是ExpressBodyParser吗?是的,BodyParser已经将其解析回json。它就是这样做的。要确认,请在chrome浏览器中打开开发者工具,并在“网络”选项卡中找到请求,您可以准确地看到浏览器发送的真实格式。非常感谢@PeterLyons。是的,通过浏览器测试显示JSON。我已经删除了BodyParser的用法-请参阅上面更新的示例,因此我们将对此进行测试。再次感谢!您正在查看“预览”选项卡吗?不要使用那个,你要查看原始请求。我认为你的代码很可能工作得很好,但是你对工具不熟悉,在你的提问和评论中使用了技术性但不精确的措辞,这会给你带来各种各样的困惑。发布你的开发工具请求主体的屏幕截图,或者设置一个plunkr,这样我们就可以适当地提供帮助。