我的快递/节点后端应用程序和前端应用程序曾经分开,后端运行在localhost:3000上,前端应用程序启动时使用ng服务并在localhost上运行:4200
然而,在我构建应用程序之后,所有前端的东西都被缩小并放入/ public /文件夹,它们都运行在端口3000上。我很确定它们应该像那样工作。由于我使用expressJWT中间件为没有令牌的访问者保护我的一些路由,我现在在尝试接收浏览器中的前端应用程序时获得未经授权的401 .....
如图所示,我可以毫无问题地显然加载index.html,我还可以加载所有外部托管源,如boots strap和jquery等... 但我自己的.js文件是401.我认为这是因为expressJWT,但我不完全确定。有谁知道问题是什么以及如何解决它?
也可能表示配置错误了吗? 你可以看到我试图像这样“ubnlock”公共文件夹:
app.use(expressJWT({secret: secret}).unless({path :
['/','../public/*','/api/authenticate', '/api/register']}))
全文:
const express = require("express")
const bodyParser = require("body-parser")
const logger = require('morgan')
const api = require("./api/api")
const path = require('path')
const secret = require('./models/secrets')
const expressJWT = require('express-jwt')
const cors = require('cors');
const app = express()
app.set("json spaces", 2)
app.use(logger("dev"))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
// CORS middleware
app.use(cors());
app.use(expressJWT({secret: secret}).unless({path : ['/','../public/*','/api/authenticate', '/api/register']}))
app.use("/api/", api)
app.get('*', (req,res) => {
res.sendFile(path.join(__dirname, 'public/index.html'));
});
app.use(function (req, res, next) {
var err = new Error('Not Found')
err.status = 404
next(err)
})
app.use(function (err, req, res, next) {
console.error(err.status)
res.status(err.status || 500)
res.json({ msg: err.message, status: err.status })
})
// Body Parser middleware
app.use(bodyParser.json());
// Set static folder
app.use(express.static(path.join(__dirname, 'public')));
//Call this to initialize mongoose
function initMongoose(dbConnection) {
require("./db/mongooseConnect")(dbConnection)
}
app.initMongoose = initMongoose
module.exports = app
答案 0 :(得分:0)
我不是百分百肯定,但我猜你有这条线的问题。
app.use(expressJWT({secret: secret}).unless({path : ['/','../public/*','/api/authenticate', '/api/register']}))
app.use("/api/", api)`
试试这个。单个/
应该解决。
app.use('/api',expressJwt({secret: secret}).unless({path: ['/','/public/*','/api/authenticate', '/api/register']});
答案 1 :(得分:0)
在使用jwt之前使用Express静态中间件。
示例:
app
.use(express.static(STATIC_PATH))
.use(
exjwt({ secret: SECRET }).unless({
path: [/\/api\/v1\/identify/]
})
)