到目前为止,我有一个非常基本的RESTful API,我的Express应用程序配置如下:
app.configure(function () {
app.use(express.static(__dirname + '/public'));
app.use(express.logger('dev'));
app.use(express.bodyParser());
});
app.post('/api/vehicles', vehicles.addVehicle);
Run Code Online (Sandbox Code Playgroud)
如何/在哪里可以添加阻止请求到达我的中间件app.post以及app.get内容类型不是application/json?
中间件只应将具有不正确内容类型的请求停止到以/api/.开头的URL .
对于路由,我希望我的中间件将请求在/ html文件夹中定义的路由传递给服务器HTML(ejs),如果头Content-Type是application/json,则使用/ api文件夹中定义的路由.
但我不想在每条路线中定义它.所以我不是在寻找定义一些req.api属性的中间件,我可以在每个路由中检查它
app.get('/', function(req, res) {
if(req.api_call) {
// serve api
} else {
// serve html
}
});
Run Code Online (Sandbox Code Playgroud)
但我喜欢这样的事情:
// HTML folder
app.get('/', function(req, res) {
res.send('hi');
});
// API folder
app.get('/', function(req, res) {
res.json({message: 'hi'});
});
Run Code Online (Sandbox Code Playgroud)
这是可能的,如果是这样,我该怎么做?
我希望它能像这样工作:
app.use(checkApiCall, apiRouter);
app.use(checkHTMLCall, htmlRouter);
Run Code Online (Sandbox Code Playgroud) 我正在尝试检查内容的类型,但它似乎不起作用.这是shell上的输出:
$ node app.js
# Request http://localhost:3000 via browser
CLIENT DOES NOT WANT XML, JSON, OR HTML
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Run Code Online (Sandbox Code Playgroud)
以下是app.js脚本的内容:
var express = require('express');
var app = express.createServer();
app.get('/', function(req, res) {
if (req.is('xml')) {
console.log("CLIENT WANTS XML");
} else if (req.is('json') || req.is('html')) {
console.log("CLIENT WANTS JSON OR HTML");
} else {
console.log("CLIENT DOES NOT WANT XML, JSON, OR HTML");
console.log(req.header('Accept'));
}
});
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
我希望text/htmlAccept标头触发req.is('html')函数甚至application/xhtml+xmlAccept标头来触发req.is('xml'),但else语句实际上会运行.我正在使用Express 3.0.0 rc1和Node 0.8.1.
假设我有一小段代码:
var express = require('express');
var app = express();
app.get('/', function(req, res){
//I want to acccess 'req' and get info whether it's an AJAX call
});
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
当我进入 app.get(..) 函数时,我想知道发送的 get 请求是否是 AJAX 调用。对象“req”中可以告诉我这个的字段是什么?