nodejs throws无法发布错误

时间:2015-03-09 03:56:27

标签: node.js rest

我正在尝试从html表单发布数据,但它显示错误"无法POST"。

这是我的代码:

控制器/ InquiryDetails.js:

   var mongoose = require('mongoose'),
   InquiryDetails = mongoose.model('InquiryDetails');


   exports.add = function(req, res) {
   InquiryDetails.create(req.body, function (error, details) {
   if (error) return console.log(error); 
   return res.send(details);
  });
  }

路由/ Inquiry.js

 var express = require('express');
  var router = express.Router();
 var bodyParser = require('body-parser');
 var app = express();

  app.use(bodyParser.urlencoded({extended:true}));

 app.post('/InquiryDetails', function(req,res,err){
 if(err) console.log(err);
 res.json(req.body);
 console.log(req.body);

});
module.exports = router;

模型/ InquiryDetails.js

 var mongoose = require('mongoose');
 var Schema = mongoose.Schema;

var myskyll = new Schema({
  name: String, 
  email: String,
  state: String,
  country: String,
  school: String,
  profession: String,
  phone: Number 
});

  mongoose.model('InquiryDetails', myskyll);

app.js:

var express = require('express');
var mongoose = require('mongoose');
var request = require('request');

var connect = require('connect');
var serveStatic = require('serve-static');
connect().use(serveStatic(__dirname+"/index.html")).listen(8080);
var mongoUri = 'mongodb://localhost/myskyll'; 
mongoose.connect(mongoUri);
var db = mongoose.connection;
db.on('error', function () {
throw new Error('unable to connect to database at ' + mongoUri);
});

var app = express();
console.log("connection successfull");
app.configure(function(req,res){
app.use(express.bodyParser());
});

 app.use(express.static(__dirname + "/" ));

 require('./models/InquiryDetails');
 require('./routes/Inquiry');

 app.listen(3000);
 console.log('Listening on port 3000...');

的index.html:

   <form method="post" id="form1" action="InquiryDetails">
    Your Name:<span class="imp">*</span><br/><input type="text"    
     name="name" placeholder="Firstname Lastname" class="textbox"   
     autofocus required pattern="[A-Za-z-0-9]+\s[A-Za-z-'0-9]+"   
     title="'Firstname' <space> 'Lastname'"/> <br/><br/>

    Email:<span class="imp">*</span><br/><input 
     type="email" name="email" placeholder="Email" class="textbox"  
       required/><br/><br/>

    city:<span class="imp">*</span><br/><input type="text" name="city"  
    placeholder="city" class="textbox" required/><br/><br/>

                    State/Country:<span class="imp">*</span><br/>  
           <input type="text" name="country"  
         placeholder="State/Country" class="textbox" required /><br/>
       <br/>

        School/Institution:<span class="imp">*</span><br/><input  
     type="text" name="school" placeholder="Your School or  
         Institution" c lass="textbox" required /><br/><br/>

        Your Profession:<br/><input type="text" name="profession"  
   placeholder="Profession" class="textbox"><br/><br/>
    Phone:<br/><input type="text" name="phone" placeholder="Phn. no. 
   with country code" class="textbox" pattern="\+[0-9]+" title="Only  
  digits" /><br/><br/>

<input type="submit" value="Submit"   
     class="btn3"/>&nbsp;&nbsp;&nbsp;&nbsp;
    <input type="reset" value="Clear"  class="btn3" />


    </form>

我已经尝试在postman API客户端发布数据但在发布数据时显示404状态。 我的代码中有任何问题吗? 任何建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

您正在创建多个app个对象。一个在app.js中,另一个在routes/Inquiry.js中。

对于这种类型的应用程序,您将只想使用一个与需要它的人共享的app对象,因为其中只有一个实际上已在Web服务器中注册并正在使用。

这可能是您的app.post()处理程序无法正常工作的原因,因为它在错误的app对象上注册 - 未连接到实时服务器的对象。


在代码中还有其他一些看起来不正确的东西:

  1. app.post()回调的第三个参数是next()函数引用,而不是您声明并正在测试的err

  2. 您正在执行require('./models/InquiryDetails');并且该模块会导出一些内容,但您没有将require的结果分配给任何内容,因此这些导出无法使用。

  3. 您正在初始化connect模块,但是如果您使用的是最新版本的Express,则不再需要该模块,因为它现在已经在Express中内置了Express。