我编写了此函数,当我在节点服务器上收到请求时触发该函数,该函数运行良好,并发回一个文件,该文件自动开始下载。
function(req, res) {
// … other code …
try {
const fileContent = fs.readFileSync(fullPath, 'utf-8');
res.writeHead(200, {
'Content-Type': 'text/plain',
'Content-Disposition': `attachment; filename="${fileName}"`,
});
res.end(fileContent);
} catch (err) {
res.writeHead(404);
res.end();
}
}
现在,我想使用readFile
方法重写它,所以我尝试了类似的方法:
function(req, res) {
// … other code …
fs.readFile(fullPath, 'utf-8', function(err, data) {
if (err) {
res.writeHead(404);
res.end();
return;
}
res.writeHead(200, {
'Content-Type': 'text/plain',
'Content-Disposition': `attachment; filename="${fileName}"`,
});
res.end(data);
});
}
但是现在它总是返回404错误,我认为函数在响应准备好之前就退出了,因此它会丢弃发生太晚的响应?我该如何运作?
请不要建议使用第三方库,因为这不是我要的。我只想使用本机模块。
谢谢。
使用节点10.7.0
答案 0 :(得分:0)
问题实际上在代码的前面,我只是忘了在if语句中返回:
<link rel="stylesheet" href="https://unpkg.com/bootstrap@3.3.7/dist/css/bootstrap.min.css">
<div
ng-app="app"
ng-controller="ctrl">
<select
ng-model="pick"
class="form-control">
<option ng-value="cnames">NAME</option>
<option ng-value="caddress">Address</option>
<option ng-value="cpostal">PostalCode</option>
</select>
<input
type="text"
class="form-control"
ng-model="selected"
uib-typeahead="cname for cname in pick | filter:$viewValue | limitTo:5">
</div>
<script src="https://unpkg.com/angular@1.7.5/angular.min.js"></script>
<script src="https://unpkg.com/angular-ui-bootstrap@2.5.6/dist/ui-bootstrap-tpls.js"></script>
感谢@Paul让我思考并意识到了错误。