我使用firebase函数来显示NodeJS + Express,并将请求从API-Rest中分离出来,如下所示:
const auth = require('./functions/auth');
const user = require('./functions/user');
const msgtypes = require('./functions/msgtypes');
const msg = require('./functions/msg');
const comment = require('./functions/comment');
//const test = require('./functions/test');
exports.auth = auth.app
exports.user = user.app
exports.msg = msg.app
exports.msgtypes = msgtypes.app
exports.comment = comment.app 每个函数都是这样的:(用户函数) const app = require('./app');
app.get('/me', general.logUrl, ctrl.me)
app.put('/images', general.logUrl,general.isLoged, upload.any() , ctrl.removeImage)
app.post('/images', general.logUrl,general.isLoged, upload.any() , ctrl.uploadImage)
app.get('/images', general.logUrl,general.isLoged, ctrl.getImages)
//app.get('/', ctrl.get)
app.get('/notifs', general.logUrl, ctrl.getMyNotifs)
app.post('/', general.logUrl,general.isAdmin, ctrl.createUser)
app.post('/profile',general.logUrl, ctrl.publicProfile)
app.post('/contact',general.logUrl, ctrl.contactUser)
app.get('/:id', general.logUrl,general.isAdmin, ctrl.getData)
app.post('/status/:id', general.logUrl,general.isAdmin, ctrl.status)
app.put('/', general.logUrl,general.isLoged, ctrl.update)
app.post('/edit', general.logUrl,general.isLoged, ctrl.update)
app.post('/change/:id', general.logUrl,general.isLoged, ctrl.change)
app.post('/changePass', general.logUrl, general.isLoged, ctrl.changeUserPass)
app.delete('/:id', general.logUrl, general.isAdmin, ctrl.remove)
exports.app = functions.region(process.env.REGION).https.onRequest(app) (消息函数)
const app = require('./app');
app.post('/search_by' , general.logUrl, ctrl.searchWithParams )
app.post('/search' , general.logUrl, ctrl.search )
app.get('/my' , general.logUrl, general.isLoged, ctrl.getMy )
//app.get('/' general.logUrl,, general.isAdmin, ctrl.get )
app.post('/create' , general.logUrl, general.isLoged, ctrl.createNew )
app.put('/' , general.logUrl, general.isLoged, ctrl.update )
app.post('/edit' , general.logUrl, general.isLoged, ctrl.update )
app.delete('/:id' , general.logUrl, general.isLoged, ctrl.remove )
app.get('/comment/:id', general.logUrl, general.isLoged, ctrl.getComments )
app.delete('/images' , general.logUrl, general.isLoged, ctrl.removeImage )
app.post('/images' , general.logUrl, general.isLoged, upload.any() , ctrl.uploadImage )
app.get('/images' , general.logUrl, general.isLoged, ctrl.getImages )
app.get('/images/:id' , general.logUrl, general.isLoged, ctrl.getImages )
app.get('/:id' , general.logUrl, ctrl.getData )
app.post('/:id' , general.logUrl, general.isLoged, ctrl.comment )
//app.use('/comment', require('./comment.route') )
exports.app = functions.region(process.env.REGION).https.onRequest(app)问题是,当我向/ tas / images发送post时,我回答的是/ user / me的函数。
第一个是POST,第二个是GET,我不明白这是怎么回事。如果有人能给我建议或指导,我会留下一个我是如何组织的例子。
发布于 2020-10-21 02:40:37
关于这个问题,我一直在尝试不同的方法,我找到了解决方案,但不是很聪明,我希望有人能帮助我尊重。
问题来自于我创建ExpressJs应用程序的方式。我在一个单独的模块的导出中有我需要的配置,但从它看起来像是一个单例,所以当应用路由时,与该方法相对应的最后一个是响应。
解决方案是直接在每个函数中创建对象,如下所示。
let corsOpts = (req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.setHeader('Access-Control-Allow-Headers', 'Content-Type,Accept,X-ACCESS_TOKEN,Authorization,authorization,x-access-token');
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,X-ACCESS_TOKEN,Authorization,authorization,x-access-token");
res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
if ('OPTIONS' === req.method) {
//respond with 200
console.log("REQ", "OPTIONS");
res.sendStatus(200);
} else {
//move on
return next();
}
return res
}
app.use(corsOpts);
app.all('*', corsOpts);
app.use(cors());
app.options('*', cors())
//app.use(express.json());
//app.use(express.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json({limit: '50mb'}));
//app.use(bodyParser.urlencoded({limit: '50mb', extended: true}))
app.disable('x-powered-by');
app.post('/change_password',general.logUrl, ctrl.changePasswordAuth )
app.post('/getByToken' ,general.logUrl, ctrl.getByTokenAuth )
app.post('/register' ,general.logUrl, ctrl.registerAuth )
app.post('/recovery' ,general.logUrl, ctrl.recoveryAuth )
app.get('/recovery/:token' ,general.logUrl, ctrl.recoveryGetByTokenAuth )
app.post('/login' ,general.logUrl, ctrl.loginAuth )
app.get('/list' ,general.logUrl, auth.isAdmin, cUser.getUser )
app.get('/me' ,general.logUrl, auth.isLoged, cUser.meUser )
app.get('/status/:id' ,general.logUrl, auth.isAdmin, cUser.statusUser )
app.post('/user_role/:id' ,general.logUrl, auth.isAdmin, ctrl.user_roleAuth )
exports.app = functions.region(process.env.REGION).https.onRequest(app)https://stackoverflow.com/questions/64359670
复制相似问题