Node.js导出路由器和功能

Sha*_*ard 4 javascript node.js

我在文件的末尾导出路由器并导出一个函数,但我只能让它们中的一个一次工作.

// weather.js
var express = require('express');
var router = express.Router();

refreshWeather(){
// Refresh weather...
}

exports = router; // It's either this
exports.refresh = function() { // or this.
    refreshWeather();
    console.log('Done refreshing');
};
Run Code Online (Sandbox Code Playgroud)

从我的主app.js我希望能够做到这两点:

//app.js
var express = require('express');
var app = express();

var weather = require('./routes/weather.js');

app.use(weather) // I want to be able to use this for routing
weather.refresh(); // But also be able to call refresh function of weather.js
Run Code Online (Sandbox Code Playgroud)

use*_*572 15

有什么理由你不能这样做吗?这似乎比在exports中定义函数并尝试在weather.js中调用另一个函数更简洁.

module.exports = { 
  router:router,
  refreshWeather:refreshWeather
}
Run Code Online (Sandbox Code Playgroud)

然后在app.js

var weather = require('./routes/weather.js');
app.use(weather.router)
weather.refreshWeather()
Run Code Online (Sandbox Code Playgroud)

如果您不想这样做,请尝试将exports = router更改为exports.router = router.然后在app.js中你可以调用weather.router.

  • 我试过了,但出现以下错误:`TypeError: Router.use() requires middleware function but got a Object` (2认同)
  • 重新阅读答案。它很容易错过。您现在必须使用导出中的路由器属性`app.use(weather.router)` (2认同)