Cannot GET/POST with express Router()

☆樱花仙子☆ 提交于 2021-02-11 11:54:15

问题


So I've been trying to work this out for some time now and I'm missing something here. I'm trying to determine the best practice for setting up routes in Express. I'd like to separate the different routes I have setup by file. I'm trying to use the Express Router module, but I can't get it to work. Here is my main server file:

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' ));

Here is are the routes for 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;

And here is the form I'm trying to post with:

<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>

I'm know I'm not required the files properly, but this is simply giving me a 404 error.


回答1:


In your second file just listen for / route:

 /* 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 );
 });

Since you are listening in your first file app.use("/users"..)



来源:https://stackoverflow.com/questions/38508238/cannot-get-post-with-express-router

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!