it-swarm.com.de

hinzufügen einer neuen Route zum Knoten-Express

Ich versuche, eine neue Route in meine Express-App einzufügen, erhalte jedoch beim Starten des Servers eine Fehlermeldung. Der Fehler ist 

C:\development\node\express_app\node_modules\express\lib\router\index.js:252
    throw new Error(msg);
          ^
Error: .get() requires callback functions but got a [object Undefined]

hier sind meine Dateien, ich bin neu im Knoten, also lassen Sie mich wissen, wenn ich eine wichtige Datei ausgelassen habe

wege/möbel.js

exports.furniture = function(req, res){
   res.render('furniture', { title: '4\267pli' });
};

routen/index.js

/*
 * GET home page.
 */

exports.index = function(req, res){
  res.render('index', { title: '4\267pli' });
};

ansichten/Möbel.ejs

<!DOCTYPE html>
<html>
<head>
    <title>4&middot;pli -- architecture</title>
    <link rel='stylesheet' href='/stylesheets/style.css'/>
    <link href='http://fonts.googleapis.com/css?family=Didact+Gothic' rel='stylesheet' type='text/css'>
</head>
<body>
<div class="wrapper">
    <h1 class="logo"><%= title %></h1>
</div>
</body>
</html>

app.js

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , furniture = require('./routes/furniture')
  , http = require('http')
  , path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);
app.get('/furniture', routes.furniture);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});
15
Antarr Byrd

Die Schwierigkeit ist:

 routes = require('./routes'),
 user = require('./routes/user'),
 furniture = require('./routes/furniture'),

Diese 3 stellen Ihre Routenordner ein, keine bestimmte Datei, express sucht nach index.js (nicht gefunden, dann -> Fehler)

In diesen Ordnern sollten Sie eine index.js einfügen mit:

exports.xxxx =  function(req, res){
    res.render('xx', { foo: foo});
};

Dann sollte Ihre Projektordnerstruktur folgendermaßen aussehen:

routes/
  ├── index.js
  │
  ├── user/
  │     └── index.js (with a exports.user inside)
  │   
  └── fourniture/
        └── index.js (with a exports.furniture inside)

Sie können mehrere Exportfunktionen zu einer Route wie folgt hinzufügen:

app.js

// a folder called routes with the index.js file inside
routes = require('./routes')

.
.
.

app.get('/', routes.main_function);  
app.get('/sec_route', routes.sec_function);
app.post('/other_route', routes.other_function);

/routes/index.js 

exports.main_function =  function(req, res){
    res.render('template1', { foo: foo });
};

exports.sec_function =  function(req, res){
    res.render('template2', { bar: bar });
};

exports.other_function =  function(req, res){
    res.render('template1', { baz: baz });
};
24
jmingov

Wenn Ihre Website manchmal so groß ist, mache ich lieber etwas wie: 

routes/furniture.js:

module.exports = function(app)
{
    app.get("/furniture/", function(req, res) {
        res.render('furniture', { title: '4\267plieee' });
    });
}

Und dann in app.js:

require("./routes/furniture")(app);

Es ist hauptsächlich das gleiche, aber app.js wird sauberer.

6
fritsMaister

Obwohl dies etwas alt ist, obwohl ich die Art und Weise teile, wie ich das mache. Hier ist ein weiterer Ansatz, der Code sauberer macht und das Hinzufügen von Routen vereinfacht.

app.js

const app = express();
const routes = require('./routes');
app.use('/api', routes); //Main entry point

/routes/index.js

const router = require('express').Router();
const user = require('./user');
const admin = require('./admin'); 

//This is a simple route
router.get('/health-check', (req, res) =>
    res.send('OK')
);

router.route('/users')
      .post(validate, user.createUser);

router.route('/users/:userId')
      .get(validateUser, user.getUser)  
      .patch(validateUser, user.updateUser)
      .delete(validateUser, user.deleteUser);

router.route('/admins/:adminId/dashboard')
      .get(validateAdmin,admin.getDashboard);

module.exports = router;

'validateUser' und 'validateAdmin' sind benutzerdefinierte mittlere Versionen, die zur Überprüfung von Anforderungsparametern oder zur Vorverarbeitung verwendet werden, bevor die Anforderung den tatsächlichen Anforderungshandler erreicht. Dies ist optional und Sie können auch mehrere Middleware (durch Kommas getrennt) verwenden. 

/routes/user.js

module.exports = {
  createUser:function(req,res,next){

  },
  updateUser:function(req,res,next){

  },
  deleteUser:function(req,res,next){

  }
}

/routes/admin.js

module.exports = {
  getDashboard:function(req,res,next){

  }
}
2
aravindaM