Heim > Fragen und Antworten > Hauptteil
Ich bin ein Neuling und habe einige Fragen zu node.
Mein app.js sieht so aus:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
//api
var a_api = require('./routes/api/a');
var b_api = require('./routes/api/b');
var c_api = require('./routes/api/c');
var d_api = require('./routes/api/d');
app.use('/api', [a_api, b_api, c_api, d_api]);
a.js
var express = require('express');
var router = express.Router();
var async = require('async');
router.get('/:id/:name/home', function (req, res, next) {
var id = req.params.id;
var name = req.params.name;
res.writeHead(200, {'Content-Type': 'application/json'});
res.end(JSON.stringify({'id':id,'name':name}));
});
module.exports = router;
Angenommen, es gibt 100 Routing-Schnittstellen. Muss ich dann nicht 100 Dateien in der App benötigen und diese dann 100 Mal konfigurieren? Wenn ich einen statischen Loader schreiben möchte, habe ich immer das Gefühl soll ich es schreiben?
怪我咯2017-06-21 10:14:26
以下是个人见解:
1.app.js 是服务启动文件,不应该过多的去处理路由(routes),以题主的图片来讲,每当我要添加一个新的route,都需要去修改app.js,而app.js则会越来越长
2.附上本人解决这个问题的方案
// /app.js -- 项目启动文件
// import routes
const api = require('./routes/index')
// set baseUrl
app.use('/api', api) // '/api' 作为根地址,只需定义一次
// /routes/index.js -- 定义所有的路由
const router = require('express').Router()
// defined api list -- 每一行对应一个文件
router.use('/login', require('./login')) // 该路由的根地址 '/login'
router.use('/register', require('./register')) // 该路由的根地址 '/register'
// ...
module.exports = router
// /routes/login.js -- 路由具体实现
const router = require('express').Router()
// 实际api地址 /api/login
router.post('/', function (req, res, next) {
res.json('do something...')
})
// 实际api地址 /api/login/auth
router.post('/auth', function (req, res, next) {
res.json('do something...')
})
module.exports = router
3.希望对题主有所帮助
高洛峰2017-06-21 10:14:26
你的路由应该是分模块的吧。
一般一个模块一个js
用户模块 user.js /users/xxx
订单模块 order.js /order/xxx
...
就算你有100个URL,一般来说模块不会很多,10个模块已经不是小型系统了,你这样写挺好看的
tips:
express发送json
router.get('/:id/:name/home', function (req, res, next) {
var id = req.params.id;
var name = req.params.name;
res.json({name:name,id:id});
});
曾经蜡笔没有小新2017-06-21 10:14:26
app.js中一般是写url的前部分,在具体的js中写剩下部分,比如一个url为localhost:3000/use/index,对于这个url,可以将url的use部分写在app.js中,index部分写在具体的js中,比如a.js,则app.js中写法为app.use('use',a),然后再a.js中写router.get('/index',fn),设计url时,可以设计固定前半部分的url,比如/use/index,/use/login,等,把use固定,这样app.js中只用写一个。