如果标题随请求一起传递,Express中间件将执行两次?

时间:2019-03-14 09:49:39

标签: node.js express

嗨,我是Node js的新手,我为此使用了表达框架

如果我在下面将标题传递给中间件,则我的中间件将运行两次

const express = require('express');
const port = 3003;
const app = express();


app.use( function(req, res, next){
    console.log('This is called twice when headers are passed in request:');
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "*");
    next();
});


app.get('/', function(req, res, next){
    console.log('hey im called');
    res.send({message: 'hi'})
});


const server = app.listen(port, function(error){
    if (error){
    console.log(`Error: ${error}`)
    return
    }
    console.log(`server is listining on ${port}, ${this}`)
});

从浏览器控制台$.ajax({ url: 'http://localhost:3003', headers: { x: 1 , y: 1}})调用

1 个答案:

答案 0 :(得分:1)

似乎您正在从与localhost:3003浏览器不同的域进行AJAX调用,它将首先在实际API之前发送pre-flight option调用。

您可以在pre-flightCORS Here

中找到更多详细信息

解决方案: 您可以在根URL /上呈现html页面,该页面将包含ajax调用,并将您现有的api路由放置为

app.get('/test', function(req, res, next){ console.log('hey im called'); res.send({message: 'hi'}) });

您的ajax呼叫将是

$.ajax({ url: 'http://localhost:3003/test', headers: { x: 1 , y: 1}})