Node.js 在express中,如何从同一控制器的另一个操作调用一个操作?
我正在node.js中使用express编写APi 控制器:Node.js 在express中,如何从同一控制器的另一个操作调用一个操作?,node.js,express,Node.js,Express,我正在node.js中使用express编写APi 控制器: /** * @module QuestionController */ //1st Action exports.videoUploaded = function(req,res) { // myCode(); } //2nd Action exports.transcribe = function(req, res) { var id = req.params.question_id; // myCode(); } v
/**
* @module QuestionController
*/
//1st Action
exports.videoUploaded = function(req,res)
{
// myCode();
}
//2nd Action
exports.transcribe = function(req, res)
{
var id = req.params.question_id;
// myCode();
}
var questionController = require('./../controllers/question');
var apiRouter = express.Router();
apiRouter.route('/questions/:question_id/video_uploaded')
.post(Auth.roleAtLeastPatient,questionController.videoUploaded);
apiRouter.route('/questions/:question_id/transcribe')
.post(Auth.roleAtLeastPatient,questionController.transcribe);
路线:
/**
* @module QuestionController
*/
//1st Action
exports.videoUploaded = function(req,res)
{
// myCode();
}
//2nd Action
exports.transcribe = function(req, res)
{
var id = req.params.question_id;
// myCode();
}
var questionController = require('./../controllers/question');
var apiRouter = express.Router();
apiRouter.route('/questions/:question_id/video_uploaded')
.post(Auth.roleAtLeastPatient,questionController.videoUploaded);
apiRouter.route('/questions/:question_id/transcribe')
.post(Auth.roleAtLeastPatient,questionController.transcribe);
我的服务器文件:
var app = require('./srv/express-app');
var webserver = http.createServer(app);
一切正常,我可以从浏览器和邮递员那里调用这些端点。但是,在发送req
参数的同时,如何从内部调用transcribe
操作videoUploaded
操作。如何导出
//1st Action
videoUploaded(req,res){
// myCode();
}
//2nd Action
transcribe(req, res) {
// myCode();
videoUploaded(...);
}
exports default {
videoUploaded,
transcribe,
};
如何使用它
import funcs from 'Questions';
apiRouter.route('/questions/:question_id/video_uploaded')
.post(Auth.roleAtLeastPatient, funcs.videoUploaded);
在您的情况下,您会创建函数并将它们直接存储到module.exports中。因此,在您声明的文件中没有可用的内容(VideoUpload在转录中不可用) 我所做的是在文件中声明新函数,因此它们的作用域是文件(VideoUpload可以调用transcribe)。然后我们导出指向文件中函数的指针,这样您就可以从外部调用它们
更好的解决方案是使用ES6类,如:
export default class Controller {
static videoUploaded() {
// I can call other methods like :
Controller.transcribe(...);
}
static transcribe() {
}
}
然后使用它:
import Controller from 'Controller';
apiRouter.route('/questions/:question_id/video_uploaded')
.post(Auth.roleAtLeastPatient, Controller.videoUploaded);
在控制器中,如果您使用名称初始化了一个函数,则可以从
videoUploaded
函数内部调用它,然后执行module.exports={videoUploaded:“videoUploaded\u function”,transcribe:“transcribe\u function”}
@ArchNoob,实际上,控制器中还有许多其他操作。我仍然认为您可以从命名函数调用它并进行单独的导出。哦,已经有一个答案支持我的观点了!嗯<代码>视频上传()代码>应视频上传(req,res)代码>他需要这些参数。是的ofc这里只是为了展示it@mega6382我做了一个编辑:)如果你需要更多的解释,请告诉我