2016-03-23 16 views
0

Formumun eyleminde hangi bağlantıyı bildirdiğim önemli değil, her zaman 404 hatası veriyor. alması için yöntemi değiştirirsem, olmaz.NodeJS express İleti formu - eylem her zaman 404

HTML:

<form class="container-fluid searchContainer" action="/active" method="post"> 
    <div class="col-xs-6"> 
     <div class="form-group"> 
      <label for="businessUnit">Business unit</label> 
      <input type="text" ng-model="businessUnit" id="businessUnit" name="businessUnit" class="form-control"/> 
     </div> 
     <div class="form-group"> 
      <label for="tenderId">Tender ID</label> 
      <input type="text" name="tenderID" ng-model="tenderId" id="tenderId" class="form-control"/> 
     </div> 
    </div> 
    <div class="col-xs-6"> 
     <div class="form-group"> 
      <label for="tenderDate">Tender Bidding Date</label> 
      <input type="date" ng-model="tenderDate" name="tenderDate" id="tenderDate" class="form-control"/> 
     </div> 
     <div class="form-group"> 
      <label for="therapyArea">Therapy area</label> 
      <input type="text" ng-model="therapyArea" name="therapyArea" id="therapyArea" class="form-control"/> 
     </div> 

    </div> 
    <div class="col-md-12 text-right"> 
     <input type="submit" id="btnCreate" value="Create" class="btn btn-primary" > 
    </div> 
</form> 

JAVASCRIPT:

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var active = require('./routes/active'); 



var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// 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: true 
})); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/users', users); 
app.use('/active', active); 


// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handlers 



// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
     res.status(err.status || 500); 
     res.render('error', { 
      message: err.message, 
      error: err 
     }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: {} 
    }); 
}); 


module.exports = app; 


var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/tenders'); 

var db = mongoose.connection; 

db.on('error', function(err) { 
    console.log('connection error', err); 
}); 
db.once('open', function() { 
    console.log('connected.'); 
}); 


var Schema = new mongoose.Schema({ 
    TenderID: String, 
    TenderDate: String, 
    BusinessUnit: String, 
    TherapyUnit: String 
}); 



var Tender = mongoose.model('Tender', Schema); 


app.post('/active', function(req, res) { 

    new Tender({ 
     TenderID: req.body.tenderID, 
     TenderDate: req.body.tenderDate, 
     BusinessUnit: req.body.businessunit, 
     TherapyUnit: req.body.therapyUnit 
    }).save(function(err, doc) { 
     if (err) res.json(err); 
     else res.send('Succesfully insterted') 

    }) 

}); 
+0

get|post|delete|etc() aracılığı geçirilen kuralları sırayla değerlendirir? –

cevap

3

app.post('/active')'u tanımlamadan önce 404 yol işleyicinizi tanımladığınızdan, ifade önce 404 kuralını değerlendirir ve döndürür. POST/aktif rotanız asla değerlendirmeye alınmaz. Bunu düzeltmek için, 404 rotanızdan önce POST/aktif rotanızı ifade etmelisiniz (bu, her zaman son rotanız olmalıdır).

dosyanın ./routes/active tanımlanan eşdeğer POST/etkin rotayı, bu 404 rota önce değerlendirilir halde

app.use('/active', active); 

bu sorunu çözmek değil çizgi yoksa. app.use() vs app.get|post|etc()in the express docs hakkında daha fazla bilgi alabilirsiniz.

Ekspres onlar use() veya ./routes/active içeriğini gönderebilir miyim

+0

Bu iyi çalıştı! Ancak bunu yayınladıktan sonra nasıl bir manzara görebilirim? Şu anda res.end'den "Başarılı şekilde insterted" görüyorum, aktif görünümü nasıl görebilirim? –

+0

@SanderVanKeer Şu anda tarayıcıya geri gönderdiğiniz tek şey "Başarıyla eklenmiştir". Yani tam bir html sayfası (res.sendFile) geri göndermeniz veya bir şablon oluşturmanız gerekir ([yeşim] gibi bir şey (http://jade-lang.com) işe yarar). Form gönderiminizin sizi yeni bir sayfaya götürmesini istemiyorsanız, [AJAX teknikleri] 'ni kullanarak istemci tarafında javascript yazmanız gerekir (https://developer.mozilla.org/en-US/docs/AJAX /Başlamak). –

+0

Sadece bir res.redirect() kullandım ama yardımın için teşekkürler, gerçekten bana yardım ettin! –

0

You ben çalışıyorum çünkü benim giriş alanları veri almak ve benim mongedb veritabanında göndermeye yazı kullanmak istiyorum sunucunuzda get rotasını tanımladı. Bu şekilde

app.post('/active',function(req,res){ 

içine

app.get('/active',function(req,res){ 

değiştirmeye çalışın, tarayıcıdan bir post isteğine yanıt verecektir.

+0

Soruda onu düzenledim, yine de aynı problemi veriyor –

+0

Aynı zamanda bir rotaya sahip olduğunuzu görüyorum 'app.use ('/active ', aktif);' Bunlardan birini yeniden adlandırmaya çalışır mısınız? –