首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个函数的Firebase函数

具有多个函数的Firebase函数
EN

Stack Overflow用户
提问于 2020-10-15 02:45:04
回答 1查看 38关注 0票数 0

我使用firebase函数来显示NodeJS + Express,并将请求从API-Rest中分离出来,如下所示:

代码语言:javascript
复制
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');

代码语言:javascript
复制
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) 

(消息函数)

代码语言:javascript
复制
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,我不明白这是怎么回事。如果有人能给我建议或指导,我会留下一个我是如何组织的例子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-21 02:40:37

关于这个问题,我一直在尝试不同的方法,我找到了解决方案,但不是很聪明,我希望有人能帮助我尊重。

问题来自于我创建ExpressJs应用程序的方式。我在一个单独的模块的导出中有我需要的配置,但从它看起来像是一个单例,所以当应用路由时,与该方法相对应的最后一个是响应。

解决方案是直接在每个函数中创建对象,如下所示。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64359670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档