对象原型在Node.JS中不起作用

时间:2018-04-06 02:38:51

标签: javascript node.js express prototype

当我尝试在我的node / express应用程序中创建对象原型时,我遇到了一些问题。

我首先创建原型,如下所示:

Object.prototype.printObject = function () {
  return console.log(this);
}

现在问题在于我调用此函数。例如,当我调用这样的函数时:

let request = {1:2}
request.printObject();
*//Logs {1:2}*

不会发生错误。然而,当我这样称呼函数时:

let request = req.body
request.printObject();

我的程序因错误而崩溃:TypeError: request.printObject is not a function

有没有人知道为什么会这样?

3 个答案:

答案 0 :(得分:0)

如果你需要('身体解析器')?或者req.body未定义,你应该先这样做

var bodyParser = require('body-parser') 
app.use(bodyParser.urlencoded({ extended: false }))

答案 1 :(得分:0)

尝试对任何Object进行原型设计,你可以创建一个像这样的中间件函数:

app.use(function (req, res, next) {
  console.log('req');
  //you could also add any function to req,even so thats not a common thing to do
  req.printObject = function { ... }
  next();
});

您的方法的问题可能是,在创建请求对象后将函数添加到Object原型中。(编辑:这是错误的,请参阅注释)

答案 2 :(得分:0)

您添加了' printObject' Object原型的方法。因此,如果req.body是对象,您应该能够调用该方法。

尝试使用console.log(typeof req.body)检查req.body的类型,以验证它是否为对象。

如果不是,则应使用节点模块' body-parser'使用已解析的正文内容填充req.body

例如,您的服务器代码部分可能如下所示:

const express = require('express');
const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.json()); // Data is being sent to the server in JSON format

app.post('/my/endpoint', function(req, res){
    req.body.printObject();
});

'身体解析器'模块也支持其他格式。我以JSON为例。您可以在此处找到他们支持的所有内容:https://www.npmjs.com/package/body-parser