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在他的代码中使用了kosteksendResponse()
,我刚刚复制了它。您是对的,我们不需要包装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在他的代码中使用了kosteksendResponse()
,我刚刚复制了它。您是对的,我们不需要包装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)代码>,这是最简单的工作解决方案。