在我的NodeJS express应用程序中,我有app.js,它有一些常见的路由。然后在wf.js文件中,我想定义更多的路由。
如何让app.js识别在wf.js文件中定义的其他路由处理程序?
一个简单的要求似乎不起作用。
在我的NodeJS express应用程序中,我有app.js,它有一些常见的路由。然后在wf.js文件中,我想定义更多的路由。
如何让app.js识别在wf.js文件中定义的其他路由处理程序?
一个简单的要求似乎不起作用。
当前回答
如果你使用express-4。使用TypeScript和ES6,这将是最好的模板使用:
登录src /火/ ts。
import express, { Router, Request, Response } from "express";
const router: Router = express.Router();
// POST /user/signin
router.post('/signin', async (req: Request, res: Response) => {
try {
res.send('OK');
} catch (e) {
res.status(500).send(e.toString());
}
});
export default router;
src / app.ts
import express, { Request, Response } from "express";
import compression from "compression"; // compresses requests
import expressValidator from "express-validator";
import bodyParser from "body-parser";
import login from './api/login';
const app = express();
app.use(compression());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(expressValidator());
app.get('/public/hc', (req: Request, res: Response) => {
res.send('OK');
});
app.use('/user', login);
app.listen(8080, () => {
console.log("Press CTRL-C to stop\n");
});
比使用var和module.exports干净多了。
其他回答
如果你使用express-4。使用TypeScript和ES6,这将是最好的模板使用:
登录src /火/ ts。
import express, { Router, Request, Response } from "express";
const router: Router = express.Router();
// POST /user/signin
router.post('/signin', async (req: Request, res: Response) => {
try {
res.send('OK');
} catch (e) {
res.status(500).send(e.toString());
}
});
export default router;
src / app.ts
import express, { Request, Response } from "express";
import compression from "compression"; // compresses requests
import expressValidator from "express-validator";
import bodyParser from "body-parser";
import login from './api/login';
const app = express();
app.use(compression());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(expressValidator());
app.get('/public/hc', (req: Request, res: Response) => {
res.send('OK');
});
app.use('/user', login);
app.listen(8080, () => {
console.log("Press CTRL-C to stop\n");
});
比使用var和module.exports干净多了。
如果你想要一个单独的.js文件来更好地组织你的路由,只需在app.js文件中创建一个变量,指向它在文件系统中的位置:
var wf = require(./routes/wf);
然后,
app.get('/wf', wf.foo );
其中.foo是wf.js文件中声明的某个函数。如
// wf.js file
exports.foo = function(req,res){
console.log(` request object is ${req}, response object is ${res} `);
}
我试图用“express”更新这个答案:“^4.16.3”。这个答案与ShortRound1911的答案相似。
server.js:
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const db = require('./src/config/db');
const routes = require('./src/routes');
const port = 3001;
const app = new express();
//...use body-parser
app.use(bodyParser.urlencoded({ extended: true }));
//...fire connection
mongoose.connect(db.url, (err, database) => {
if (err) return console.log(err);
//...fire the routes
app.use('/', routes);
app.listen(port, () => {
console.log('we are live on ' + port);
});
});
/ src /线路/ index.js:
const express = require('express');
const app = express();
const siswaRoute = require('./siswa_route');
app.get('/', (req, res) => {
res.json({item: 'Welcome ini separated page...'});
})
.use('/siswa', siswaRoute);
module.exports = app;
/ src /线路/ siswa_route.js:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.json({item: 'Siswa page...'});
});
module.exports = app;
在快车4号。X,你可以得到一个路由器对象的实例,并导入另一个包含更多路由的文件。您甚至可以递归地执行此操作,以便您的路由导入其他路由,从而允许您创建易于维护的URL路径。
例如,如果我的/tests端点已经有一个单独的路由文件,并且想为/tests/automated添加一组新的路由,我可能想将这些/automated路由分解到另一个文件中,以保持/test文件小且易于管理。它还可以让你在逻辑上把路由按URL路径组合在一起,这非常方便。
./app.js的内容:
var express = require('express'),
app = express();
var testRoutes = require('./routes/tests');
// Import my test routes into the path '/test'
app.use('/tests', testRoutes);
./routes/tests.js的内容:
var express = require('express'),
router = express.Router();
var automatedRoutes = require('./testRoutes/automated');
router
// Add a binding to handle '/tests'
.get('/', function(){
// render the /tests view
})
// Import my automated routes into the path '/tests/automated'
// This works because we're already within the '/tests' route
// so we're simply appending more routes to the '/tests' endpoint
.use('/automated', automatedRoutes);
module.exports = router;
./routes/testRoutes/ automatic .js文件的内容:
var express = require('express'),
router = express.Router();
router
// Add a binding for '/tests/automated/'
.get('/', function(){
// render the /tests/automated view
})
module.exports = router;
所有这些答案的一个调整:
var routes = fs.readdirSync('routes')
.filter(function(v){
return (/.js$/).test(v);
});
只需使用正则表达式通过测试数组中的每个文件进行筛选。它不是递归的,但它会过滤掉不以.js结尾的文件夹