Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
5 / 5 / 0
Регистрация: 11.09.2021
Сообщений: 578

Запустить проект. Начало

27.07.2022, 19:28. Показов 3939. Ответов 23

Студворк — интернет-сервис помощи студентам
Хочу разобраться с Node.js.
Использую проект.
Состав проекта смотри картинки.

Основная цель: просто посмотреть как это работает.

Какую IDE использовать?
Как его запустить?

Владею начальными навыками C#(ASP.NET(MVC)).

Использую:
- Windows 10x64;

У меня установлено:
- VSCode;
- Visual Studio 2022 Community(Установлено NodeJS);
- Node.js (c:\Program Files\nodejs\node.exe);
- OpenServer;


1_NodeJS_start.bat
Bash
1
node app.js
app.js
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
const express = require("express");
const bodyParser = require("body-parser");
const flash = require("connect-flash");
const expressSession = require("express-session");
const MySQLStore = require("express-mysql-session")(expressSession);
const connection = require("./db/connection");
const helpers = require("./helpers");
const config = require("./config.json");
const moment = require("moment");
const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const crypto = require("crypto");
const cookieParser = require("cookie-parser");
 
moment.locale("ru");
 
const app = express();
 
let listener = require("http").Server(app);
 
passport.serializeUser(function (user, done) {
  done(null, user.id);
});
 
passport.deserializeUser(function (id, done) {
  connection.query("select * from users where id = " + id, (err, rows) => {
    done(err, rows[0]);
  });
});
 
passport.use(
  "local-signup",
  new LocalStrategy(
    {
      usernameField: "email",
      passwordField: "password",
      passReqToCallback: true,
    },
    (req, email, password, done) => {
      connection.query(
        "select * from users where email = ?",
        [email],
        (err, rows) => {
          if (err) {
            return done(err);
          }
          if (rows.length) {
            return done(
              null,
              false,
              req.flash("signupMessage", "That email is already taken.")
            );
          } else {
            // create the user
 
            crypto.pbkdf2(
              password,
              email,
              25000,
              512,
              "sha256",
              (err, hash) => {
                let newUserMysql = new Object();
                newUserMysql.email = email;
                newUserMysql.password = hash.toString("hex");
 
                connection.query(
                  "INSERT INTO users (email, password) values (?, ?)",
                  [newUserMysql.email, newUserMysql.password],
                  (err, rows) => {
                    newUserMysql.id = rows.insertId;
                    return done(null, newUserMysql);
                  }
                );
              }
            );
          }
        }
      );
    }
  )
);
 
passport.use(
  "local-login",
  new LocalStrategy(
    {
      usernameField: "email",
      passwordField: "password",
      passReqToCallback: true,
    },
    (req, email, password, done) => {
      connection.query(
        "SELECT * FROM `users` WHERE `email` = ?",
        [email],
        (err, rows) => {
          if (err) {
            return done(err);
          }
          if (!rows.length) {
            return done(
              null,
              false,
              req.flash("loginMessage", "No user found.")
            );
          }
 
          crypto.pbkdf2(password, email, 25000, 512, "sha256", (err, hash) => {
            password = hash.toString("hex");
            if (!(rows[0].password == password)) {
              return done(
                null,
                false,
                req.flash("loginMessage", "Oops! Wrong password.")
              );
            }
          });
 
          return done(null, rows[0]);
        }
      );
    }
  )
);
 
const routes = require("./routes.js")(express.Router(), passport);
 
app
  .use(
    express.static("static", {
      maxage: "4h",
    })
  )
  .use(cookieParser())
  /*.use(i18n.init)*/
  .set("view engine", "ejs")
  .use(bodyParser.json())
  .use(
    bodyParser.urlencoded({
      extended: true,
    })
  )
  .use(
    expressSession({
      secret: config.express.secret,
      store: new MySQLStore({}, connection),
      resave: false,
      saveUninitialized: false,
    })
  )
  .use(passport.initialize())
  .use(flash())
  .use(passport.session())
  .use(async (req, res, next) => {
    res.locals.error = null;
    res.locals.helpers = helpers;
    res.locals.user = null;
    res.locals.moment = moment;
    res.locals.url = req.url;
    next();
  })
  .use(routes)
  .use((req, res, next) => {
    let err = new Error("Здесь ничего нет");
    err.status = 404;
    next(err);
  })
  .use((err, req, res, next) => {
    if (err.status != 404) {
      err.message = "Неизвестная ошибка";
    }
 
    return res.status(err.status || 500).render("error", {
      message: err.message,
      error: req.app.get("env") === "development" ? err : null,
      status: err.status || 500,
    });
  });
 
let server = listener.listen(config.express.port || 3000, () => {
  const host =
    server.address().address == "::" ? "localhost" : server.address().address;
  const port = server.address().port;
  console.log("Start at http://%s:%s", host, port);
});

config.js
JavaScript
1
2
3
4
5
6
7
8
9
var config = {  
  express: {
  secret: 'cfgdgN1D798646fg5dFypV3HsB4g7m9',
  port: 3000,
  domain: 'http://localhost:3000',
  path: 'C:/server',
  }
}
module.exports = config;

config.json
JSON
1
2
3
4
5
6
7
8
9
10
11
12
{
  "mysql": {
    "host": "localhost",
    "user": "root",
    "password": "",
    "db": "polimedia5"
  },
  "express": {
    "secret": "dgdf98dfg7d98tc6dSJEv4986VVF",
    "port": 3000
  }
}


package.json
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
  "name": "Denny",
  "version": "1.0.0",
  "description": "Histuseum",
  "main": "app.js",
  
  "scripts": {
    "start": "NODE_ENV=development nodemon app.js"
  },
  "author": "Artsiom Liavitski Ethereal Dream IMPERIVM",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.18.2",
    "connect-flash": "^0.1.1",
    "cookie-parser": "^1.4.3",
    "ejs": "^2.5.9",
    "express": "^4.16.3",
    "express-mysql-session": "^1.3.0",
    "express-session": "^1.15.6",
    "format-number": "^3.0.0",
    "fs-promise": "^2.0.3",
    "i18n": "^0.8.3",
    "moment": "^2.22.1",
    "multer": "^1.3.1",
    "mysql": "^2.15.0",
    "mysql2": "^1.5.3",
    "passport": "^0.4.0",
    "passport-local": "^1.0.0",
    "randomstring": "^1.1.5",
    "slash": "^3.0.0",
    "socket.io": "^2.3.0",
    "striptags": "^3.1.1"
  }
}
routes.js
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
const multer = require('multer');
const rand = require('randomstring');
 
const filesStorage = multer.diskStorage({
  destination: (req, file, next) => {
    next(null, 'static/uploads/files');
  },
  filename: (req, file, next) => {
    const ext = file.originalname.split('.').pop();
    next(null, rand.generate({
      length: 32,
      charset: 'alphabetic'
    }) + '.' + ext);
  }
});
const filesUpload = new multer({
  storage: filesStorage
});
 
 
const site = {
  main: require('./controllers/main')
};
 
const cms = {
  articles: require('./controllers/cms/articles'),
  files: require('./controllers/cms/files'),
  lang: require('./controllers/cms/lang'),
  slideshow: require('./controllers/cms/slideshow')
};
 
module.exports = (app, passport) => {
 
  app
    .get('/', site.main.lang)
    .get('/video', site.main.video)
    .get('/slideshow', site.main.slideshow)
    .get('/:lang', site.main.index)
    .get('/:lang/articles', site.main.index)
    .get('/:lang/articles/:id', site.main.article)
    .get('/:lang/panomuseum', site.main.panomuseum)
    .get('/:lang/panomuseum/2', site.main.panomuseum2)
    .get('/:lang/panotheatre', site.main.panotheatre);
 
  app
 
    .get('/cms/lang', cms.lang.index)
    .post('/cms/lang', filesUpload.any(), cms.lang.save)
 
    .get('/cms/:lang/articles', cms.articles.index)
    .post('/cms/articles/saveOrder', cms.articles.saveOrder)
 
    .get('/cms/:lang/articles/add', cms.articles.add)
    .post('/cms/:lang/articles/add', filesUpload.any(), cms.articles.postAdd)
 
    .get('/cms/:lang/articles/:id/edit', cms.articles.edit)
    .post('/cms/:lang/articles/:id/edit', filesUpload.any(), cms.articles.postEdit)
    .get('/cms/:lang/articles/:id/delete', cms.articles.delete)
 
    .get('/cms/:lang/articles/:id', cms.articles.subArticle)
    .get('/cms/:lang/articles/add/:id', cms.articles.add)
 
    .post('/cms/files/delete', cms.files.delete)
    .post('/cms/files/saveFile', filesUpload.single('file'), cms.files.saveFile)
    .post('/cms/files/saveThumb', filesUpload.single('thumb'), cms.files.saveThumb)
 
    .get('/cms/slideshow', cms.slideshow.index)
    .post('/cms/slideshow/save', filesUpload.any(), cms.slideshow.save);
 
  return app;
};
Миниатюры
Запустить проект. Начало   Запустить проект. Начало   Запустить проект. Начало  

Запустить проект. Начало  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.07.2022, 19:28
Ответы с готовыми решениями:

Не запустить проект с GitHub
Доброго времени суток! Работаю на Windows 10 x64. Мои действия по порядку: 1) нашел web-приложение, решил его немного доработать под...

Запустить проект локально
Ребят, помогите запустить проект локально на компьютере. Нужны пошаговые инструкции, пожалуйста! Очень нужно! Спасибо заранее! ...

Как запустить проект в VS Code?
Всем привет как запустить проект JS что еще ему нехватает для сборки ?

23
5 / 5 / 0
Регистрация: 11.09.2021
Сообщений: 578
27.07.2022, 21:33  [ТС]
Студворк — интернет-сервис помощи студентам
DrType,
Выполнил.
- запустил wampserver . (По факту пишет, что не запустился, но MySql запустился);
- выполнил SQL запросы из файла polimedia5.sql;
- перешёл в консоль - > ввёл команду node app.js;
- результат:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
e:\Test\Pro01>node app.js
Start at http://localhost:3000
You have tried to call .then(), .catch(), or invoked await on the result of query that is not a promise, which is a programming error. Try calling con.promise().query(), or require('mysql2/promise') instead of 'mysql2' for a promise-compatible version of the query interface. To learn how to use async/await or Promises check out documentation at https://www.npmjs.com/package/mysql2#using-promise-wrapper, or the mysql2 documentation at https://github.com/sidorares/node-mysql2/tree/master/documentation/Promise-Wrapper.md
e:\Test\Pro01\node_modules\mysql2\lib\commands\query.js:41
    throw new Error(err);
    ^
 
Error: You have tried to call .then(), .catch(), or invoked await on the result of query that is not a promise, which is a programming error. Try calling con.promise().query(), or require('mysql2/promise') instead of 'mysql2' for a promise-compatible version of the query interface. To learn how to use async/await or Promises check out documentation at [url]https://www.npmjs.com/package/mysql2#using-promise-wrapper[/url], or the mysql2 documentation at [url]https://github.com/sidorares/node-mysql2/tree/master/documentation/Promise-Wrapper.md[/url]
    at Query.then (e:\Test\Pro01\node_modules\mysql2\lib\commands\query.js:41:11)
    at MySQLStore.query (e:\Test\Pro01\node_modules\express-mysql-session\index.js:392:12)
    at MySQLStore.<anonymous> (e:\Test\Pro01\node_modules\express-mysql-session\index.js:110:9)
    at FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3)
 
Node.js v18.7.0
 
e:\Test\Pro01>
Миниатюры
Запустить проект. Начало   Запустить проект. Начало   Запустить проект. Начало  

Запустить проект. Начало   Запустить проект. Начало   Запустить проект. Начало  

Запустить проект. Начало  
0
5 / 5 / 0
Регистрация: 11.09.2021
Сообщений: 578
28.07.2022, 14:48  [ТС]
DrType,
Дополнение.

Вопрос.
1. В config.js параметр path: 'C:/server', это что?
Путь к серверу wampserver?
У меня сервер wampserver установился в папку c:\wamp64\.
Привести в соответствие?
2. Что нужно сделать после внесения изменений в config.js ?
Просто:
- Сохранить Ctrl+S;
- консоль: node app.js;
Так?

config.js
JavaScript
1
2
3
4
5
6
7
8
9
var config = {  
  express: {
  secret: 'cfgdgN1D798646fg5dFypV3HsB4g7m9',
  port: 3000,
  domain: 'http://localhost:3000',
  path: 'C:/server',
  }
}
module.exports = config;
0
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
28.07.2022, 15:05
Насчёт wampserver — всё, что вам сейчас нужно из его функционала это MySQL и, возможно, инструменты для работы с БД (phpmyadmin, который вы уже используете).
Насчёт config.js — не вижу, где в проекте он вообще используется. Если он используется в каком-то из скриптов, то в этом скрипте должно быть require("./config.js") (путь до файла config.js может быть каким-то другим)...
В чём причина возникающей ошибки — пока не понял.
1
5 / 5 / 0
Регистрация: 11.09.2021
Сообщений: 578
28.07.2022, 15:37  [ТС]
Цитата Сообщение от DrType Посмотреть сообщение
В чём причина возникающей ошибки — пока не понял.
На правах бреда моё мнение "может это связано с оформлением(синтаксисом) JS или ошибками"
Или это бред?
Куда копать?

Фрагмент сообщения об ошибке.

Начните с [url]http://localhost:3000 [/url]
Вы пытались вызвать .then(), .catch()
или вызвать await для результата запроса, который не является обещанием,
что является ошибкой программирования.
Попробуйте вызвать can.promise().query()
или require('mysql2/promise')
вместо 'mysql2' для версии интерфейса запроса,
совместимой с promise.
Чтобы узнать, как использовать async/await или Promises,
ознакомьтесь с документацией по адресу [url]https://www.npmjs.com/package/mysql2#using-promise-wrapper [/url]
или документация mysql2 по адресу [url]https://github.com/sidorares/node-mysql2/tree/master/documentation/Promise-Wrapper.md [/url]
e:\Test\Pro01\node_modules\mysql2\lib\commands\query.js:41
выдает новую ошибку(error);


Добавлено через 25 минут
Цитата Сообщение от DrType Посмотреть сообщение
Насчёт config.js — не вижу, где в проекте он вообще используется. Если он используется в каком-то из скриптов, то в этом скрипте должно быть require("./config.js") (путь до файла config.js может быть каким-то другим)...




...\controllers\main.js
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//... Код 
const config = require('../config.js');
//... Код 
 async video(req, res, next) {
    const videoFolder = './static/video'
    let videos = []
 
    fs.readdirSync(videoFolder).forEach((file) => {
      let extension = path.extname(file)
      let filename = path.basename(file, extension)
 
      videos.push({
        file,
        filename: parseInt(filename),
      })
    })
 
    videos = videos.sort((a, b) => {
      return a.filename - b.filename
    })
 
 
 
    return res.render('video', {
      [COLOR="Red"]domain: config.express.domain,[/COLOR]
      videos,
    })
  }


..\node_modules\messageformat\package.js on
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
"eslintConfig": {
    "env": {
      "commonjs": true,
      "es6": true
    },
    "overrides": [
      {
        "files": [
          "src/*.js"
        ],
        "parser": "babel-eslint"
      },
      {
        "files": [
          "webpack.config.js"
        ],
        "env": {
          "node": true
        }
      }
    ]
  },


..\node_modules\fs-extra\CHANGELOG.md
[#290]: [url]https://github.com/jprichardson/node-fs-extra/issues/290[/url] "Exclude files pattern while copying using copy.config.js [question]"


..\node_modules\express-mysql-session\readme.md
#### Step 3: Set Up the Test Database

Now, you'll need to set up a local test database:
```js
{
host: 'localhost',
port: 3306,
user: 'session_test',
password: 'password',
database: 'session_test'
};
```
*The test database settings are located in [test/config.js]([url]https://github.com/chill117/express-mysql-session/blob/master/test/config.js)*[/url]

Alternatively, you can provide custom database configurations via environment variables:
```
DB_HOST="localhost"
DB_PORT="3306"
DB_USER="session_test"
DB_PASS="password"
DB_NAME="session_test"
```


Добавлено через 42 секунды
controllers\main.js

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
const db = require('../db');
const fs = require('fs');
const path = require('path');
const config = require('../config.js');
class Main {
 
  async video(req, res, next) {
    const videoFolder = './static/video'
    let videos = []
 
    fs.readdirSync(videoFolder).forEach((file) => {
      let extension = path.extname(file)
      let filename = path.basename(file, extension)
 
      videos.push({
        file,
        filename: parseInt(filename),
      })
    })
 
    videos = videos.sort((a, b) => {
      return a.filename - b.filename
    })
 
 
 
    return res.render('video', {
      domain: config.express.domain,
      videos,
    })
  }
 
    async panomuseum(req, res) {
    const article = await db.article.getByID(req.params.lang);
    const sub = await db.article.getRoot(req.params.lang);
    const files = await db.files.getByOwnerId(req.params.lang);
 
    const lang = await db.lang.getById(req.params.lang);
 
    return res.render('panomuseum', {
      article,
      sub,
      files,
      lang
    });
  }
 
  async panomuseum2(req, res) {
    const article = await db.article.getByID(req.params.lang);
    const sub = await db.article.getRoot(req.params.lang);
    const files = await db.files.getByOwnerId(req.params.lang);
 
    const lang = await db.lang.getById(req.params.lang);
 
    return res.render('panomuseum2', {
      article,
      sub,
      files,
      lang
    });
  }
 
  async panotheatre(req, res) {
    const article = await db.article.getByID(req.params.lang);
    const sub = await db.article.getRoot(req.params.lang);
    const files = await db.files.getByOwnerId(req.params.lang);
 
    const lang = await db.lang.getById(req.params.lang);
 
    return res.render('panotheatre', {
      article,
      sub,
      files,
      lang
    });
  }
 
  async index(req, res) {
    const article = await db.article.getByID(req.params.lang);
    const sub = await db.article.getRoot(req.params.lang);
    const files = await db.files.getByOwnerId(req.params.lang);
 
 
    const lang = await db.lang.getById(req.params.lang);
    const timeout = await db.settings.getByID("timeout");
    const caption = await db.settings.getByID("caption");
 
 
    return res.render("index", {
      article,
      sub,
      files,
      lang,
      timeout,
      caption,
      domain: req.app.get("domain"),
    });
  }
 
  async menu(req, res) {
    return res.render("menu", {
      domain: req.app.get("domain"),
    });
  }
 
  async slideshow(req, res) {
    const slideshow = await db.files.getSlideshow();
    const timer = await db.settings.getByID("timer");
 
    return res.render("slideshow", {
      slideshow,
      timer,
      domain: req.app.get("domain"),
    });
  }
 
  async slide(req, res) {
    const slideshow = await db.files.getByID(req.params.id);
    const timer = await db.settings.getByID("timer");
 
    return res.render("slideshow", {
      slideshow: [slideshow],
      timer,
      domain: req.app.get("domain"),
    });
  }
 
  async article(req, res) {
    const article = await db.article.getByID(req.params.id);
    const sub = await db.article.getSub(req.params.id);
    const files = await db.files.getByOwnerId(req.params.id);
    const id = req.params.id;
    const lang = await db.lang.getById(req.params.lang);
    const timeout = await db.settings.getByID("timeout");
    const caption = await db.settings.getByID("caption");
 
    return res.render("index", {
      id,
      article,
      sub,
      files,
      lang,
      timeout,
      caption,
      domain: req.app.get("domain"),
    });
  }
 
  
  async lang(req, res) {
    const langs = await db.lang.getAll();
 
    let activeCount = 0;
 
    for (let lang of langs) {
      if (lang.value == 1) {
        activeCount++;
      }
    }
 
    if (activeCount == 0) {
      return res.redirect("/0");
    } else if (activeCount == 1) {
      for (let lang of langs) {
        if (lang.value == 1) {
          return res.redirect("/" + lang.id);
        }
      }
    }
 
    const timeout = await db.settings.getByID("timeout");
 
    return res.render("lang", {
      langs,
      timeout,
    });
  }
 
  async openSlide(req, res) {
    console.log("openSlide");
    let files = await db.files.getSyncSmartHome();
 
    parentIO.sockets.in("client").emit("goToUrl", {
      message: "/slide/" + files[parseInt(req.params.id)].id,
    });
 
    return res.json({
      success: true,
    });
  }
 
  async openSlideshow(req, res) {
    console.log("open slideshow");
 
    parentIO.sockets.in("client").emit("goToUrl", {
      message: "/slideshow",
    });
 
    return res.json({
      success: true,
    });
  }
}
 
module.exports = new Main();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.07.2022, 15:37
Помогаю со студенческими работами здесь

Как запустить проект?
Скачала я тестовый проект с github. Открыла этот проект в WebStorm, сделала npm install для package.json. прописываю в терменале npm...

Как запустить чужой проект?
Добрый день ... хотел скачать и запустить чужой проект, чтобы рассмотреть его функции... но столкнулся с рядом проблем ... что он не...

Почему не удаётся запустить проект?
Помогите мне пожалуйста. Пытаюсь запустить проект, разобраться с реактом. Читаю в файле package.json &quot;build&quot;:...

Как запустить проект .wasm
Всем добрый день! :) Возможно, я ошиблась разделом, ибо новичок в вэбе, прошу простить и перенаправить куда нужно. :) Такой...

Запустить проект
Подскажите пожалуйста как мне открыть .NET проект (фолдер и запустить в браузере). Скачал вижуал студио, когда я выбираю открыть проект, не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru