我有问题在下面的代码中为用户设置路由,我想使用快速中间件并使用app.use
尝试路由。
index.js
正在调用用户控制器方法所以在下面的代码中我试图从客户端发布数据api/users
,但它返回404.
如何使用以下路线设置解决此问题?
server.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;
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''));
});
};
config> 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());
}
用户索引,我将处理用户的所有crud操作
app> 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;
答案 0 :(得分:0)
<强>第一强>
处理所有请求
使用 app.use()和app.METHOD()函数将应用程序级中间件绑定到 app对象的实例,其中METHOD是中间件函数以小写处理(例如GET,PUT或POST)的请求的HTTP方法。
此示例显示没有装载路径的中间件功能。每次 应用程序收到请求时都会执行此功能 。
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)
使用上述函数代替此
但是这个函数最后只有在没有找到app对象的路径时才会执行。 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;
您的app.use将为
app.use(api/user)
,而用户将为router.get(/api/user)
,因此当您尝试http://127.0.0.1:8080/api/user时 您的回复将为respond for ..../api/user