2016-04-20 16 views
0

Ich befolge ein Tutorial, um eine Knoten/Express-App mit der Jade-Templating-Engine zu bauen, und ich bekomme einen 404-Fehler, wenn ich versuche, ein Formular zu senden. Für mein Routing habe ich die Zeile app.post('/sign_up', sign_up);, die mir einen Fehler gibt. Die Variable sign_up wird oben unter Verwendung dieser Zeile var sign_up = require('./routes/sign_up'); deklariert.Knoten/Express Form Handhabung

Das Merkwürdige ist, wenn ich eine Callback-Funktion an der Stelle des sign_up Variable registrieren, dann kann ich die Daten in Ordnung abrufen, die ich mit diesem Code habe app.post('/sign_up', function(req, res){ console.log(req.body); });.

In meinem Routenordner habe ich die sign_up.js Datei und die eine ziemlich einfache Textzeile ausgibt. Ich habe versucht, sind die Funktion Ändern

var express = require('express'); 
var router = express.Router(); 

/* GET users listing. */ 
router.get('/', function(req, res, next) { 
    res.send('You signed up'); 
}); 
module.exports = router; 

Im Folgenden wird der Inhalt meiner form.jade Datei

extends layout 
    block content 
    h1= title 
    form(name="sign-up", action="/sign_up", method="post") 
     div 
      label Username: 
      input(type="text", name="username") 
     div 
      label Password: 
      input(type="password", name="password") 
     div 
      input(type="submit", value="Sign Up") 
+0

Fügen Sie einen Blick auf die Frage, ich denke, das ist ein Duplikat von. Sie sind verwirrt darüber, wie Sie Routen in externen Dateien deklarieren. –

+0

Danke für die Eingabe. Wie ich schon sagte, ich folge einem Tutorial und das war was im Tutorial ist. Danke, dass Sie in die richtige Richtung zeigen. – Courtney

Antwort

0

Wenn Sie sign_up.js werden mit dem Routing zu handhaben, dann sollten Sie die Post definieren Funktion dort. Versuchen Sie, dies in sign_up.js

/* POST*/ 
router.post('/sign_up', function(req, res, next) { 
    res.send('You signed up'); 
}); 
+0

Das löste mich Problem. Vielen Dank. Es ist seltsam, weil die anderen Pfade alle '/' benutzten und sie funktionierten, also ist in der Datei users.js der Pfad '/ users' definiert als 'router.get ('/', function (req, res, next) { res.send ('antworte mit einer Ressource'); }); 'Kannst du erklären, warum das funktioniert und das andere nicht? – Courtney

+0

Die anderen verwenden 'router.get', für die Post-Methode müssen Sie' router.post' verwenden. Wenn Sie Put brauchen, müssen Sie in Zukunft auch 'router.put' verwenden. Wenn Sie einen globalen Handler für alle HTTP-Methoden benötigen, können Sie 'router.all' auch verwenden. –

+0

Was ich gefragt habe, war, warum Sie zu _http navigieren können: // localhost: 3000/users_ selbst die Route für diesen Pfad ist 'router.get ('/', Funktion (req, res, next) {res. send ('Reagiere mit einer Ressource');}); 'Welches ist in der Datei users.js? Wenn ich 'router.get ('/ users', function (req, res, next) {res.send ('antworte mit einer Ressource');});' in der Datei users.js, bekomme ich einen 404-Fehler . – Courtney