在执行res.send()时如何设置内容类型?

时间:2018-08-02 20:33:16

标签: express

在路由功能的结尾,当我做这样的事情时。

res.send(JSON.stringify({...}));

我希望将响应的内容类型设置为“文本/纯文本”,但是它是“文本/ html”。有没有办法明确设置它?我搜索了文档,但没有任何线索。

4 个答案:

答案 0 :(得分:5)

setHeader,然后发送:https://nodejs.org/api/http.html#http_response_setheader_name_value

res.setHeader('content-type', 'text/plain');
res.send(JSON.stringify({...}));

答案 1 :(得分:4)

有几种方法可以实现此目的,其中最干净/最简单的方法是(假设根据标签使用express;如果不使用expressjs,请参见最终答案选项):

res.type('txt');
res.send(JSON.stringify({...}));

这是使用res.type的,它提供了许多速记方式,并且能够设置显式的mime类型,例如(还有其他):

res.type('.html')            // => 'text/html'
res.type('html')             // => 'text/html'
res.type('json')             // => 'application/json'
res.type('application/json') // => 'application/json'
res.type('png')              // => 'image/png'
res.type('mp3')              // => 'audio/mp3'

在撰写本文时,根据implemented,这是res.set,也可以直接称为:

res.set('content-type', 'text/plain');
res.send(JSON.stringify({...}));

这些是执行此功能的正式记录方式(除了res.header也是res.set的别名)。但是,似乎响应对象是从http.ServerResponse派生的,因此,响应对象也具有use方法(在实现中为setHeader),其用法与{ {1}},没有与res.set完全相同的功能(某些检查未完成,等等)。但是它确实完成了基本工作,因此完全有可能找到代码在野外会解决您这个问题的目标(尤其是如果它不是快速应用程序,而是使用http包):

res.set

(作为一个旁注:每个RFC 7230(以前是RFC 2616),标头名称都是大小写敏感的。也就是说,res.setHeader('Content-Type', 'text/plain'); res.send(JSON.stringify({...})); 大写是RFC 7231中使用的,它定义了它的含义和用法,也是Content-Type将要使用的。也就是说,我已经看到至少res.type的一些示例-小写的标头名称,因此我想证明两者都有可能。)

答案 2 :(得分:3)

您可以尝试res.set设置Content-Type标头,如下所示:

res.set('content-type', 'text/plain');
res.send(JSON.stringify({...}));

答案 3 :(得分:0)

你也可以使用

res.set('content-type', 'text/plain')