سلام
کدهای فایل سرور من که نوشتم به این شکل هست
const http = require('http')
const configs = require('./configs')
const path = require('path')
const queryStringParser = require('qs')
const postDataParser = require('formidable')
const fileServer = require('node-static')
const staticFileServer = new fileServer.Server(configs.publicDir)
const viewFileServer = new fileServer.Server(configs.viewDir)
const controller = require('./controller')
// -----------------
async function getDataFromRequest(request) {
const promise = new Promise((resolve, reject) => {
let data = {
fields: {},
files: {}
}
queryStringFileds = queryStringParser.parse(request.parsUrl.search.split('?')[1])
if (request.method == 'GET') {
Object.assign(data.fields, queryStringFileds)
resolve(data)
}
let postData = {
fields: {},
files: {}
}
let pd = new postDataParser.IncomingForm()
pd.parse(request, (err, fields, files) => {
Object.assign(postData.fields, fields)
Object.assign(postData.files, files)
})
pd.on('end', () => {
Object.assign(data.fields, queryStringFileds, postData.fields)
Object.assign(data.files, postData.files)
// console.log(data)
resolve(data)
})
})
return await promise
}
function getRoutController(request) {
let rout = request.parsUrl.pathname.split('/')
return {
path: rout[1] != undefined ? rout[1] : '',
controller: rout[2] != undefined ? rout[2] : 'home',
method: rout[3] != undefined ? rout[3] : 'index'
}
}
// -----------------
const server = http.createServer((req, res) => {
req.parsUrl = new URL(path.join(configs.baseUrl, req.url))
const rout = getRoutController(req)
getDataFromRequest(req).then(data => {
if (rout.path == 'api') {
if (controller[rout.controller] != undefined) {
if (controller[rout.controller][rout.method] != undefined) {
response = controller[rout.controller][rout.method](data)
res.writeHead(200, { 'Content-Type': 'application/json' })
res.write(JSON.stringify({ status: 1, data: response }), "binary")
res.end()
return
}
res.writeHead(200, { 'Content-Type': 'application/json' })
res.write(JSON.stringify({ status: 0, message: "Your requested method not Founded...!" }), "binary")
res.end()
return
}
res.writeHead(200, { 'Content-Type': 'application/json' })
res.write(JSON.stringify({ status: 0, message: "Your requested api not Founded...!" }), "binary")
res.end()
return
}
if (rout.path == '') {
staticFileServer.serveFile('index.html', 200, {}, req, res)
}
staticFileServer.serve(req, res, (e) => {
res.writeHead(404, { 'Content-Type': 'application/json' })
res.write(JSON.stringify({ file: 'NotFound...!' }), "binary")
res.end()
return
})
})
})
server.listen(8080, () => {
console.log("SERVER is running on port 8080...")
})
و حالا دوتا سوال یا مشکل دارم
۱: چرا پردازش رو باید توی then پرومیس گرفتن دیتا انجام بدیم؟ یعنی من اومدم توی then پرومیز ، دیتا رو ریختم توی یک متغییر ولی در خارج از then دیگه دسترسی به اون دادهها نداشتم.
۲: سوال دومم اینه که همه چی اوکی هست ولی وقتی دوبار که رفرش رو میزنم روی یک آدرس ، وسط کار خطای زیر رو میده خواستم ببینم این خطا برای نوع کدنویسی هست یا نه به چیزی دیگه مربوطه؟
events.js:287
throw er; // Unhandled 'error' event
^
Error [ERR_STREAM_WRITE_AFTER_END]: write after end
at write_ (_http_outgoing.js:637:17)
at ServerResponse.write (_http_outgoing.js:629:15)
at I:\xampp\htdocs\js\completeFirstApi\server.js:85:17
at Server.finish (I:\xampp\htdocs\js\node_modules\node-static\lib\node-static.js:128:21)
at finish (I:\xampp\htdocs\js\node_modules\node-static\lib\node-static.js:170:14)
at I:\xampp\htdocs\js\node_modules\node-static\lib\node-static.js:337:13
at streamFile (I:\xampp\htdocs\js\node_modules\node-static\lib\node-static.js:382:13)
at ReadStream.<anonymous> (I:\xampp\htdocs\js\node_modules\node-static\lib\node-static.js:375:17)
at ReadStream.emit (events.js:310:20)
at internal/fs/streams.js:242:14
Emitted 'error' event on ServerResponse instance at:
at writeAfterEndNT (_http_outgoing.js:692:7)
at processTicksAndRejections (internal/process/task_queues.js:85:21) {
code: 'ERR_STREAM_WRITE_AFTER_END'
}
ممنون