gpt4 book ai didi

javascript - Node js中路由期间的CORS问题

转载 作者:行者123 更新时间:2023-11-30 15:06:56 25 4
gpt4 key购买 nike

我正在尝试将我的 Angular 应用程序连接到我的 Node 服务器,但我不想将我的路由保留在服务器文件中,所以我有一个看起来像这样的 Node 服务器文件

    var express         = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var app = express();
var router = express.Router();
var port = process.env.PORT || 3000;
var mongoose = require('mongoose');
var cors = require('cors');

app.use(cors())
var db ='mongodb://localhost:27017/demo'
mongoose.connect(db,function(err){
if(err){
console.log("err");
}
else{
console.log("coonected to db");
}
})


app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(morgan('dev'));


app.set('views', path.join(__dirname,'views'));
app.set('view engine','ejs');
app.engine('html',require('ejs').renderFile);

app.use(express.static(path.join(__dirname,'app')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));

app.get('/',function(req,res){
console.log("you have reached server");
res.json('wtf');
})


module.exports = app;
require('./route.js');
app.listen(port);

在 route.js 中我有这样的路线

    var login   = require ('./api/login');
var app = require('./server')
app.get('/login',login.authenticate);

如果我在 Node 服务器上使用它,它工作正常,但如果我在 Angular 服务器上使用它,它会显示此错误:

从“localhost:3000/login”到“localhost:3000/login/”的重定向已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin” header 。因此不允许访问源 'localhost:4200'。

它只会发生在我在 route.js 中定义的路由上。如果我在 server.js 中定义相同的路由,它们就可以正常工作。

PS:我也用过

app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", '*');
res.header("Access-Control-Allow-Credentials", true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json');
next();
});

和此代码的一些变体,但如果我想路由到我的路由文件中的登录 url,则没有任何效果

最佳答案

您的应用在 routes.js 和 server.js 中引用的不是同一个东西。因此,您的“应用程序”将无法在 routes.js 中运行。如果你想在 routes.js 中使用 app = express() 你可以在 server.js 中添加这样的东西

var Routes = require('./routes.js');
var r = new Routes(app);

因此,为了像这样实例化路由,您的 routes.js 应该如下所示:

module.exports = function(app){
var login = require ('./api/login');
app.get('/login',login.authenticate);
...
}

旧答案:

作为@Anurag Singh Bisht还回答了你应该允许跨域请求。我的回答会略有不同:

app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", '*');
res.header("Access-Control-Allow-Credentials", true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json');
next();
});

关于javascript - Node js中路由期间的CORS问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45607304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com