Em có một trang được viết sử dụng Node.js và Express, trong đó em cần phải xác thực người dùng khi họ truy cập vào trang /dashboard
.
Đoạn code để xử lý việc xác thực này như sau:
var auth = require('auth');
app.get('/dashboard', function (req, res) {
var user = auth.check();
if (!user) {
res.send('Unauthorized');
}
res.send('Welcome ' + user.username);
});
Khi lauch ứng dụng trên máy local và truy cập vào trang dashboard
thì em thấy Node.js văng ra lỗi này:
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11)
at ServerResponse.header (/home/trananh/tmp/myapp/node_modules/express/lib/response.js:719:10)
at ServerResponse.contentType (/home/trananh/tmp/myapp/node_modules/express/lib/response.js:552:15)
at ServerResponse.send (/home/trananh/tmp/myapp/node_modules/express/lib/response.js:139:14)
at /home/trananh/tmp/myapp/app.js:49:6
at Layer.handle [as handle_request] (/home/trananh/tmp/myapp/node_modules/express/lib/router/layer.js:95:5)
at next (/home/trananh/tmp/myapp/node_modules/express/lib/router/route.js:131:13)
at Route.dispatch (/home/trananh/tmp/myapp/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/home/trananh/tmp/myapp/node_modules/express/lib/router/layer.js:95:5)
at /home/trananh/tmp/myapp/node_modules/express/lib/router/index.js:277:22
Ứng dụng thì vẫn chạy bình thường nhưng em không hiểu tại sao lại có thông báo lỗi như ở trên?
Guest
- 1970/01/01 Trả lờiNguyên nhân của lỗi trên là do trong biểu thức điều kiện
if
bạn khôngreturn
sau khi gửi header trong trường hợp người dùng chưa được xác thực. Do đó khi chạy ứng dụng và truy cập vào trangdashboard
với tài khoản chưa đăng nhập thì Express sẽ phải thực hiện thao tác gửi header hai lần.Để fix lỗi trên bạn sửa lại đoạn code như sau:
Và chạy lại ứng dụng để kiểm tra.