Express 执行res.send()时如何设置内容类型?
在路由函数的末尾,当我这样做时Express 执行res.send()时如何设置内容类型?,express,Express,在路由函数的末尾,当我这样做时 res.send(JSON.stringify({...})); 我希望响应的内容类型设置为“text/plain”,但它是“text/html”。有没有办法明确地设置它?我搜索了文档,但没有任何线索。发送前设置标题: 您可以尝试设置内容类型标题,如下所示: res.set('content-type', 'text/plain'); res.send(JSON.stringify({...})); 有几种方法可以实现这一点,其中最干净/最简单的可能是(假设使
res.send(JSON.stringify({...}));
我希望响应的内容类型设置为“text/plain”,但它是“text/html”。有没有办法明确地设置它?我搜索了文档,但没有任何线索。发送前设置标题: 您可以尝试设置
内容类型
标题,如下所示:
res.set('content-type', 'text/plain');
res.send(JSON.stringify({...}));
有几种方法可以实现这一点,其中最干净/最简单的可能是(假设使用,基于标记;如果不使用expressjs,请参阅最终答案选项): 这就是使用,它提供了许多速记,并且能够设置显式mime类型,例如(在许多其他类型中): 在撰写本文时,这是指,也可以直接称为:
res.set('content-type', 'text/plain');
res.send(JSON.stringify({...}));
这些是官方记录的执行此功能的方法(除了res.header
是res.set
的别名)。然而,响应对象似乎是从中派生出来的,因此也有(以及在实现中)来自该对象的方法,该方法与res.set
具有相同的用法,没有与res.set
完全相同的功能(一些检查没有完成,等等)。。。但是它确实完成了基本的工作,因此完全有可能在野外找到可以解决您这个问题的代码(特别是如果它不是一个express应用程序,而是使用包):
(作为旁注:per(以前在中),标题名称不区分大小写。这就是说,
Content-Type
大写是在中使用的,它定义了它的含义和用法,并且是res.Type
将要使用的。也就是说,我至少看到了一些res.set
与所有小写标题名称一起使用的示例,所以我想我应该说明这两个都是正确的可能。)注意:我不确定收到了什么Exotel get请求。Exotel auto call test
是,但我去掉了它,用问题的内容替换了它,因为res.set是重要的一部分。考虑到这个问题用express
标记,可能最好使用res.type('txt')
,或者res.set('content-type','text/plain'))
而不是res.setHeader
,因为后者在技术上来自不同的API(尽管express在内部使用它,因此它仍然可以工作)。这并没有让我觉得有足够的问题来进行否决投票,但我建议大家参考一个[我刚才写的是为了更彻底(和面向express的)处理方法。这个解决方案似乎已经过时。没有setHeader。只有“set”:@AndroidDev正如前面的评论所指出的,setHeader在节点api上。
res.type('txt');
res.send(JSON.stringify({...}));
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'
res.set('content-type', 'text/plain');
res.send(JSON.stringify({...}));
res.setHeader('Content-Type', 'text/plain');
res.send(JSON.stringify({...}));