如何在 node.js + Express 中同时支持 json 和 jsonp 响应?

Posted

技术标签:

【中文标题】如何在 node.js + Express 中同时支持 json 和 jsonp 响应?【英文标题】:How to support both json and jsonp responses in node.js + Express? 【发布时间】:2014-10-05 13:10:38 【问题描述】:

我有一个 REST API 服务,使用 Node.js + Express 编写,目前支持 JSON 格式的响应。

现在,我还需要添加对 JSONP 响应的支持,因此每个人都可以通过在请求字符串中添加 alt=JSONP 来获得它。

那么,我的问题是,最好的方法是什么?

可能,有模式,还是活生生的例子?

谢谢!

【问题讨论】:

【参考方案1】:

官方支持的方法如下--

首先,设置你的 JSONP 回调参数名称:

app.set('jsonp callback name', 'callback');

然后,将res.jsonres.send 的所有实例更改为res.jsonp。 例如res.jsonp(500, error: 'message' )

如果在请求中提供了 callback 参数,则响应将使用提供的函数名称包装为 JSONP,但如果不是,它只会返回 JSON。

然后,这将返回 JSONP: GET /myapi/v1/users?callback=responseCallback

这不会: 获取 /myapi/v1/用户

参考http://expressjs.com/4x/api.html#res.jsonp

【讨论】:

但是 POST 或 DELETE 请求呢?据我所知,它不适用于 JSONP。 它应该以完全相同的方式工作。就 express 而言,GET/POST/DELETE/etc 都是一样的,只是发送方式不同。至于发出这些请求,您必须使用方法覆盖。 github.com/expressjs/method-override 很好的答案!我疯狂地寻找它。 显然jsonp中没有post或delete请求。

以上是关于如何在 node.js + Express 中同时支持 json 和 jsonp 响应?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止直接访问 IP Express node.js

如何在 Node.js / Express.js 中将中间件放在它自己的文件中

如何在 node.js (express) 中全局设置内容类型

如何在超级终端中停止运行 Node.js (Express) 服务器

如何检查用户是不是在 Firebase 和 Express/Node.js 中经过身份验证?

如何启用调试 express.js/node.js 应用程序