gpt4 book ai didi

javascript - 如何使用express中间件来处理所有路由?

转载 作者:太空宇宙 更新时间:2023-11-03 22:28:30 24 4
gpt4 key购买 nike

我在下面的代码中为用户设置路由时遇到问题,我想使用快速中间件并尝试使用 app.use 进行路由。

一旦调用 api,

index.js 就会调用用户 Controller 方法,因此在下面的代码中,我尝试从客户端发布数据api/users,但它返回 404。

如何使用以下路由设置解决此问题?

服务器.js

var express        = require('express');
var app = express();
var bodyParser = require('body-parser');
var methodOverride = require('method-override');
var mongoose = require('mongoose');
console.log(mongoose.connection.readyState);
var db = require('./config/db');
var port = process.env.PORT || 8080;
mongoose.connect(db.url);
app.use(methodOverride('X-HTTP-Method-Override'));
app.use(express.static(__dirname + '/public'));

require('./app/routes')(app); // configure our routes
require('./config/express')(app);
app.listen(port);
console.log('listening on port ' + port);
exports = module.exports = app;

应用程序>routes.js

 module.exports = function(app) {


app.use('api/users', require('./api/user'));
app.get('*', function(req, res) {
res.sendfile('./public/views/index.html'); // load our public/index.html file
// res.sendFile(path.join(__dirname, ''../public/views/index.html''));
});

};

配置>express.js

var express = require('express');
var morgan = require('morgan');
var bodyParser = require('body-parser');
// import cookieParser from 'cookie-parser';
// import errorHandler from 'errorhandler';
var path = require('path');
// import lusca from 'lusca';
var config = require('./db');
var mongoose = require('mongoose');
//var mongoStore = connectMongo(session);

module.exports = function(app) {
// app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(methodOverride());
}

用户索引,我将在其中处理用户的所有增删改查操作

应用程序> api>用户>index.js

var express = require('express');
var controller = require('./user.controller');

var router = express.Router();

router.get('/', controller.index);
router.post('/',controller.create);

module.exports = router;

最佳答案

第一:

处理所有请求

使用 app.use() 和 app.METHOD() 函数将应用程序级中间件绑定(bind)到 app 对象的实例,其中 METHOD是中间件函数处理的请求的 HTTP 方法(例如 GET、PUT 或 POST),小写

此示例显示了一个没有安装路径的中间件函数。每次应用收到请求时都会执行该函数。

app.use(function(req,res)
{

res.sendfile('./public/views/index.html');
console.log("Not found....I will handle *unhandle* rout here for you");
})

//app.get('*', function(req, res) 使用上面的函数代替这个

但是这个函数在最后,所以只有在没有找到到应用程序对象的路由路径时才会执行。 Express documentation

第二:

处理createuser

var express = require('express');
var controller = require('./user.controller');

var router = express.Router();
// you must define route which you want to handle in user file
router.get('/api/user', controller.index);

router.post('/',controller.create);

module.exports = router;

更新工作示例并提供一些解释

您的 app.js 文件

var express=require('express')
var app=express()
app.use('api/user',require('./user'))
app.use('/',require('./user'))
app.use(function(req,res)
{
res.sendfile('stack10.html')
console.log("Not found....I will handle *unhandle* rout here for you");
})
app.listen(8080,function()

{
console.log("server listening on port 8080")
})

user.js

var express = require('express')
var router = express.Router()
var app=express()
router.get('/api/user', function(req, res) {
res.send('respond for ..../api/user')
});
router.get('/',function (req,res) {
res.send('respose for ..../')
})
module.exports = router;

Your app.use will be app.use(api/user) while in user will be router.get(/api/user) so when u try http://127.0.0.1:8080/api/user your response will be respond for ..../api/user

关于javascript - 如何使用express中间件来处理所有路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41655381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com