使用NodeJs和Express构建REST API:我的目标是实现最简单的Middlewares
:
JSON
)function logReqMiddleware(req, res, next) {
log.info('>>> %s at %s', req.method, req.path);
next();
}
function logResponseMiddleware(req, res, next) {
log.info('<<< %s (%s)', JSON.stringify(res), res.status);
next();
}
export var router = express.Router();
router.get('/', foo);
function foo(req, res, next) {
res.status(200).json({ stupidExample: true });
next();
}
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(logReqMiddleware);
app.use('/api', apiController.router);
app.use(logResponseMiddleware);
var server = app.listen(3000, function(){ log.info('running'); });
现在,localhost:3000/api
发出请求说:can't set headers after they are sent
; this is the related super cool response我的问题是,用json()
编写json数据并添加第二个中间件是不兼容的吗?我该如何解决这个问题?
答案 0 :(得分:1)
请勿在{{1}}内拨打->add('photo','file',array(
'attr' => array("class"=>"filestyle",
"data-iconName"=>"glyphicon-inbox",
"data-buttonText"=>"Scegli foto..",
"data-buttonName"=>"btn-primary",
"data-iconName"=>"glyphicon-folder-open"),
'label'=>'user.file.label',
'required'=>false,
)
)
。没有其他事可做,所以调用next()
可能会将您发送到Express的默认404处理程序,该处理程序尝试使用默认状态和正文进行响应。
除此之外:logResponseMiddleware
不是你想要的。 next()
是表示响应的对象实例(许多方法,内部状态属性等)。它不是响应正文内容字符串。由于JSON.stringify(res)
是一个可写流,它不会保留响应主体内容供您记录,它只是尝试通过HTTP连接发送它。