【问题标题】:Node js not returning proper result?Node js没有返回正确的结果?
【发布时间】:2017-11-10 20:24:35
【问题描述】:

我有这个节点 js 程序,它应该在控制台中返回询问的变量,但它返回 undefined 这里是代码和我试图解析的输入:-

router.post('/createorder',function(req,res){
    console.log(req.body.ProductName);

    // var obj=JSON.parse(req.body);
    res.send(req.body);
});

输入:

{
  "ProductName":"Wine",
  "ProductPrice":"500",
  "ProductQuantity":"2",
  "ProductCost":"1000",
  "SellerId":"2"  
}

这是我正在使用的主要模块

var express= require('express');
var routes=require('./routes/api');
var bodyparser=require('body-parser');
var mysql = require('mysql');

var db=mysql.createConnection({
    host:'localhost',
    user:'root',
    password:'',
    database:'nodemysql'
})
//setting up express
var app = express();
app.use(bodyparser.urlencoded({extended:false}));
app.use(bodyparser.json());

app.use(routes);

//listen for requests
/*app.get('/',function(req,res){
    console.log('get trial method called');
    res.send({name:'Atul'});
});*/
app.listen(3000,function(){
  console.log('server started on port 3000 ');
});

我想访问特定对象以存储在数据库中?

【问题讨论】:

  • 你很可能没有使用 bodyParser 中间件。
  • 使用 bodyParser 中间件不是强制性的,但最好查看其余代码以更好地理解它。
  • i' 在主模块中使用它而不是在路由模块中使用它会导致问题吗?
  • 如果你在主模块中使用它,你应该没有问题,假设你使用的是 expressJS(或类似的)并正确设置它。

标签: javascript json node.js


【解决方案1】:

正如 cmets 中提到的 soueuls,您需要确保 express 可以解析请求的正文,因为默认情况下它不会这样做。假设您使用的是 express 框架。你可以有这样的东西。

var express = require('express')
var bodyParser = require('body-parser')

var app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

现在你可以阅读正文了。

请注意,如果您在添加上述代码之前控制台记录您的 req 对象,您将看不到 body 属性。

更新

这就是我的 app.js 文件中的内容

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 index = require('./routes/index');


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

app.use('/', index);


// 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 handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

在我的 routes/index.js 我有以下内容

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

router.post('/createorder',function(req,res){
    console.log(req.body);

    // var obj=JSON.parse(req.body);
    res.send(req.body);
});

module.exports = router;

我用邮递员应用程序对此进行了测试,它可以工作。

【讨论】:

  • 我已经按照你的建议做了,但我仍然得到相同的结果
  • 能否请您向我们展示您的代码,我很乐意为您提供帮助,直到您让它正常工作:)。你用的是快递吗?
  • 查看我修改后的帖子
  • 是的,如果我想读取产品名称等特定数据并存储在数据库中?
  • 抱歉,您最初的问题是您在 body.req 属性的发布路线中未定义。我希望我的回复有用,但我不会通过 github 为您实现数据库。有很多资源展示了如何做到这一点。
猜你喜欢
  • 2023-03-14
  • 2014-09-13
  • 2012-08-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
相关资源
最近更新 更多