为什么Express应用程序的使用/所有方法都不起作用?

时间:2015-05-01 18:04:06

标签: javascript node.js express

这是我的快递:

var tty = require('tty.js');

var app = tty.createServer({
  shell: 'bash',
  port: 3001
});

app.all('*', function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  next();
});

app.get('/', function(req, res, next) {
  next();
});

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    next();
});

app.listen();

我的目标是在响应中添加标头以允许跨域访问。理论上,all和use方法调用都应该处理这个问题,但是应用程序在任何时候都不会调用它们的函数参数。

3 个答案:

答案 0 :(得分:0)

您需要创建middleware。它是通过使用功能完成的,尝试实现以下方式。并把它放在所有其他功能之前:

app.use(function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  next();
});

答案 1 :(得分:0)

如上所述,您需要实现中间件。在我的情况下,我通过访问创建Express服务器的应用程序部分来完成它。

我可以与您分享一些代码,这将有所帮助:

var tty = require('./libs/tty/tty.js');
app = tty.createServer(conf)
//Routes
var User=require('./routes/user');
var Files=require('./routes/files');

app.use( bodyParser.json() );
app.use('/user',User);
app.use('/files',Files);

答案 2 :(得分:0)

浏览器通常会发送飞行前OPTIONS请求进行CORS连接。请检查此article

您可以按如下方式处理OPTIONS请求:

app.use(function(req, res, next){
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, accept, access-control-allow-origin');

    if ('OPTIONS' == req.method) res.send(200);
    else next();
});

或使用cors npm模块:

var cors = require('cors');
app.use(cors());
app.options('*', cors());

检查此gist以获取完整的js文件。