英文:
What is wrong with this Node.js snippet?
问题
以下是您要翻译的代码部分:
const fs = require('fs');
const http = require('http');
const server = http.createServer((req, res) => {
if (req.headers['x-secret'] != process.env.SECRET )
res.writeHead(403).end('Secret incorrect');
let body = [];
req.on('data', chunk => {
body.push(chunk);
});
req.on('end', () => {
body = JSON.parse(Buffer.concat(body).toString());
fs.writeFileSync(body.filename, body.file);
res.writeHead(200).end('OK');
});
});
server.listen(7654);
请注意,我已将 HTML 实体编码转换回正常的 JavaScript 代码。
英文:
I am learning node.js and the course says there is something wrong with the following snippet.
const fs = require('fs');
const http = require('http');
const server = http.createServer((req, res) => {
if (req.headers['x-secret'] != process.env.SECRET )
res.writeHead(403).end('Secret incorrect');
let body = [];
req.on('data', chunk => {
body.push(chunk);
});
req.on('end', () => {
body = JSON.parse(Buffer.concat(body).toString());
fs.writeFileSync(body.filename, body.file);
res.writeHead(200).end('OK');
});
});
server.listen(7654);
Possible things I've found include:
-
https should be used instead of http (secure server)
-
Res.writeHead.end is not valid syntax. Res.writeHead and res.end
should be written separately -
fs.writeFile() should be used, not the async version
-
There's no failsafe built-in (?)
However the course seems to be saying that there's a big mistake, which I can't really find.
Please help!
Thanks
答案1
得分: 1
Buffer.concat(body).toString()
不是有效的JSON,所以你无法解析它。
如果你将其记录下来,你将会收到以下内容:
----------------------------118769234111712879210320
Content-Disposition: form-data; name="data"; filename="test.json"
Content-Type: application/json
{
"test": "156"
}
----------------------------118769234111712879210320--
像这样。
英文:
Buffer.concat(body).toString()
is not valid JSON, so You can't parse it.
what you will receive if you log it
----------------------------118769234111712879210320
Content-Disposition: form-data; name="data"; filename="test.json"
Content-Type: application/json
{
"test": "156"
}
----------------------------118769234111712879210320--
like this
答案2
得分: 0
我只看到一个问题在这里,就是在这一行:
let body = [];
你不能将body初始化为空数组,因为你在下面的这一行中将它用作对象:
fs.writeFileSync(body.filename, body.file);
你不能使用body.filename,因为点符号只用于对象。
英文:
The only problem i see here is in the line
let body = [];
you cannot initialize body as an empty array as you are using it as an object in line
fs.writeFileSync(body.filename, body.file);
you cannot do body.filename as dot notation is only used in an object.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论