【发布时间】:2018-01-18 07:47:38
【问题描述】:
我正在尝试将我的 Angular 应用程序连接到我的节点服务器,我不想将我的路由保留在服务器文件中,所以我有一个看起来像这样的节点服务器文件
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);
如果我在节点服务器上使用它可以正常工作,但如果我在角度服务器上使用它会显示此错误:
从“localhost:3000/login”重定向到“localhost:3000/login/”已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin '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 中进行应用配置?
-
我是节点新手,我想将路由保留在单独的模块中
-
这很好,但这是您的 express 设置中的配置,可以将您的 express 相关配置保存在 server.js 中。但是,如果您可以在 routes.js 中添加用法,也许我们可以找到解决方案。
-
没关系,我没有看到您的 routes.js 已经添加。现在告诉我,你认为 routes.js 中的 app 指的是 server.js 中的同一个东西吗?
-
是的,我认为它们都是一样的
标签: javascript node.js angular cors