【问题标题】:Cannot GET/POST with express Router()无法使用快速路由器()进行 GET/POST
【发布时间】:2016-07-21 15:24:33
【问题描述】:

所以我已经尝试解决这个问题一段时间了,但我在这里遗漏了一些东西。我正在尝试确定在 Express 中设置路线的最佳做法。我想按文件分隔我设置的不同路线。我正在尝试使用 Express Router 模块,但无法正常工作。这是我的主服务器文件:

var express      = require('express');
var handlebars   = require( 'express-handlebars' );
var path         = require('path');
var favicon      = require('serve-favicon');
var logger       = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser   = require('body-parser');

// Models
var db           = require( './models/db.js' );
var user         = require( './models/user.js' );

// Routes/Controllers
var routes       = require( './routes/index.js' );
var userRouter   = require( './routes/users.js' );

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.engine( 'handlebars', handlebars( { defaultLayout: 'main' } ) );
app.set('view engine', 'handlebars');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// Routing Table
app.use('/', routes);

// User
app.use( '/users', require( './routes/users' ));

这是用户的路线:

var express        = require('express');
var userRouter     = express.Router();
var mongoose       = require( 'mongoose' );
var bodyParser     = require( 'body-parser' );
var methodOverride = require( 'method-override' );

userRouter.use( bodyParser.urlencoded({ extended: true }));
userRouter.use( methodOverride( function( req, res ) {
    if ( req.body && typeof req.body === 'object' && '_method' in req.body ) {
        var method = req.body._method;
        delete req.body._method;
        return method;
      }}));


 /* GET users listing. */
 userRouter.get( '/users', function( req, res, next ) {
     console.log( 'users GET' );
         mongoose.model( 'User' ).find( {}, function( err, users ) {
             if( err ) {
                 console.error( err );
             } else {
                 console.log( users );
                 res.render( 'users/index', { users: users } );
             }
          });
 })
 .post( function( req, res, next ) {
             console.log( req );
 });

 module.exports = userRouter;

这是我要发布的表格:

<form name='create-users' action='/users' method='post' >
   <h6>Create Account</h6>
   <fieldset>
     <label for='username'>User Name</label>
       <input name='username' id='newname' type='text' placeholder='User Name'>
       <label for='email'>Email</label>
       <input name='email' id='email' type='text' placeholder='Email'>
       <label for='newpassword'>Password</label>
       <input name='password' id='newpassword' type='text' placeholder='Password'>
       <button type='submit'>Create</button>
   </fieldset>
</form>

我知道我不需要正确的文件,但这只是给我一个 404 错误。

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    在你的第二个文件中只听 / 路由:

     /* GET users listing. */
     userRouter.get( '/', function( req, res, next ) {
         console.log( 'users GET' );
             mongoose.model( 'User' ).find( {}, function( err, users ) {
                 if( err ) {
                     console.error( err );
                 } else {
                     console.log( users );
                     res.render( 'users/index', { users: users } );
                 }
              });
     })
     .post('/', function( req, res, next ) {
                 console.log( req );
     });
    

    因为您正在侦听您的第一个文件 app.use("/users"..)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 2016-05-16
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      相关资源
      最近更新 更多