Skip to content

Commit 41dca51

Browse files
committed
Fix serving a file without an extension
1 parent 55c67ff commit 41dca51

3 files changed

Lines changed: 34 additions & 1 deletion

File tree

lib/utils/response-header.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ const setFileContentResponseHeaders = (request, response, options) => {
3434
response.setHeader('Content-Length', options.fileSize);
3535
response.setHeader(
3636
'Content-Type',
37-
mime.contentType(path.extname(options.filename))
37+
mime.contentType(path.basename(options.filename)) ||
38+
'application/octet-stream'
3839
);
3940
};
4041

test/fixtures/basic-file/noext

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
content

test/serve-asset-middleware-test.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,37 @@ describe('serve-middleware', function() {
4040
});
4141
});
4242

43+
it('serves the given file without an extension', function() {
44+
const watcher = RSVP.Promise.resolve({
45+
directory: fixture('basic-file')
46+
});
47+
48+
const middleware = watcherMiddleware(watcher, {
49+
autoIndex: false
50+
});
51+
52+
server = new TestHTTPServer(middleware);
53+
server.addMiddleware(serveAssetMiddleware);
54+
55+
return server
56+
.start()
57+
.then(info => {
58+
return server.request('/noext', {
59+
info: info,
60+
resolveWithFullResponse: true
61+
});
62+
})
63+
.then(res => {
64+
expect(res.headers['content-type']).to.equal(
65+
'application/octet-stream'
66+
);
67+
expect(res.headers['content-length']).to.equal(
68+
'content'.length.toString()
69+
);
70+
expect(res.body).to.equal('content');
71+
});
72+
});
73+
4374
it('serves the content-type according to the header', function() {
4475
const watcher = RSVP.Promise.resolve({
4576
directory: fixture('wasm-file')

0 commit comments

Comments
 (0)