Javascript 将下一个抛出错误表示为未定义下一个

Javascript 将下一个抛出错误表示为未定义下一个,javascript,node.js,express,next,Javascript,Node.js,Express,Next,我试图在app.post()方法的回调中传递一些预定义函数。我得到的下一个是未定义的错误。下面是我的代码。请说明我哪里做错了,或者我是否遗漏了任何概念 var express = require('express'); var app = express() app.post('/api/signup', function(req, res) { validateParams(req, res, next), dbCall(req, res, next), sendResponse(req,

我试图在
app.post()
方法的回调中传递一些预定义函数。我得到的下一个是未定义的错误。下面是我的代码。请说明我哪里做错了,或者我是否遗漏了任何概念

var express = require('express');

var app = express()

app.post('/api/signup', function(req, res) {
validateParams(req, res, next),
dbCall(req, res, next),
sendResponse(req, res)
})
在这里,我定义并导入了每个函数,并在进程结束后返回next()

我的validateParams功能如下:

validateParams = function(req, res, next) {
    console.log("at validator ", req);
    next();
}

module.exports = validateParams;
我的dbCall函数如下:

dbCall = function(req, res, next) {
    console.log("at dbCall ", req);
    next();
}

module.exports = dbCall;
sendResponse = function(req, res) {
    console.log("at dbCall ", res);
    res.send("Response sent successfully");
}

module.exports = sendResponse;
我的sendResponse功能如下:

dbCall = function(req, res, next) {
    console.log("at dbCall ", req);
    next();
}

module.exports = dbCall;
sendResponse = function(req, res) {
    console.log("at dbCall ", res);
    res.send("Response sent successfully");
}

module.exports = sendResponse;

您可能忘记在回调中添加
next
参数

app.post('/api/signup', function(req, res, next) {
  validateParams(req, res, next),
  dbCall(req, res, next),
  sendResponse(req, res)
})

您可能忘记在回调中添加
next
参数

app.post('/api/signup', function(req, res, next) {
  validateParams(req, res, next),
  dbCall(req, res, next),
  sendResponse(req, res)
})

我认为您正在尝试使用
validateParams(req,res,next)
dbCall(req,res,next)
作为中间件功能。在这种情况下,您需要以下内容:

const validateParams = (req, res, next) => {
  // do stuff here
  next();
}

const dbCall = (req, res, next) => {
  // do stuff here
  next();
}

app.post('/api/signup', validateParams, dbCall, function(req, res) {

sendResponse(req, res)
})

您可以阅读更多内容

我认为您正在尝试使用
validateParams(req,res,next)
dbCall(req,res,next)
作为中间件功能。在这种情况下,您需要以下内容:

const validateParams = (req, res, next) => {
  // do stuff here
  next();
}

const dbCall = (req, res, next) => {
  // do stuff here
  next();
}

app.post('/api/signup', validateParams, dbCall, function(req, res) {

sendResponse(req, res)
})

您可以阅读更多内容

您还可以共享其他函数(validateParams、dbCall)吗?我认为您希望将它们作为中间件函数使用,在这种情况下,您可以在
app.post()
中的路径后引用这些函数。您可以共享其他函数(validateParams、dbCall)吗还有?我认为您希望将它们作为中间件函数使用,在这种情况下,您可以在
app.post()
中的路径之后引用这些函数。这不起作用。它在第一个函数中执行,而在第二个函数中从不执行。我只是在安慰所有的功能。这不起作用。它在第一个函数中执行,而在第二个函数中从不执行。我只是在安慰所有的功能。你不需要包装
sendResponse
,或将
next
添加到你的wrapper@ponury-OP在他的代码中使用了kostek
sendResponse()
,我刚刚复制了它。您是对的,我们不需要包装
res.send()
,至少在这个用例中不需要。那么,“将
next
添加到包装器”是什么意思呢?你能详细解释一下吗?@ponury kostek我想你说的是如下内容:
const express=require(“express”);常量app=express();const fun1=(req,res)=>{console.log(“fun1”);}const fun2=(req,res)=>{console.log(“fun2”);}app.get(“/unit”),(req,res,next)=>{fun1(req,res,next);fun2(req,res,next);res.send(“ok”)应用程序监听(3000)`@ponury kostek,但以下操作不起作用:
const express=require('express');常量app=express();const fun1=(req,res)=>{console.log('fun1');}const fun2=(req,res)=>{console.log('fun2');}app.get('/unit',fun1,fun2,(req,res,next)=>{res send('ok');});app.listen(3000)app.post('/api/signup',validateParams,dbCall,sendResponse)
,这是最简单的工作解决方案。您不需要包装
sendResponse
,也不需要将
next
添加到wrapper@ponury-OP在他的代码中使用了kostek
sendResponse()
,我刚刚复制了它。您是对的,我们不需要包装
res.send()
,至少在这个用例中不需要。那么,“将
next
添加到包装器”是什么意思呢?你能详细解释一下吗?@ponury kostek我想你说的是如下内容:
const express=require(“express”);常量app=express();const fun1=(req,res)=>{console.log(“fun1”);}const fun2=(req,res)=>{console.log(“fun2”);}app.get(“/unit”),(req,res,next)=>{fun1(req,res,next);fun2(req,res,next);res.send(“ok”)应用程序监听(3000)`@ponury kostek,但以下操作不起作用:
const express=require('express');常量app=express();const fun1=(req,res)=>{console.log('fun1');}const fun2=(req,res)=>{console.log('fun2');}app.get('/unit',fun1,fun2,(req,res,next)=>{res send('ok');});app.listen(3000)app.post('/api/signup',validateParams,dbCall,sendResponse),这是最简单的工作解决方案。