我在nodejs上创建了一个简单的html应用程序。这是代码os server.ts
import express = require('express');
import http = require('http');
import path = require('path');
import cookieParser = require('cookie-parser');
export class Server {
static startServer() {
let app = express();
app.use(cookieParser());
app.use(express.static(__dirname + "/public"));
let server = http.createServer(app);
server.listen(7000, () => {
console.log('Up and running on port : ' + 7000);
});
}
}
exports.startServer = Server.startServer;
// Call a module's exported functions directly from the command line.
require('make-runnable');
我使用make-runnable
模块直接从命令行运行导出的函数。这是 package.json
start
脚本
"start": "concurrently \"tsc --watch \" \"nodemon server.js startServer\""
应用程序工作正常,但这是在屏幕上打印未定义的烦人,这应该解决。
[1] [nodemon] restarting due to changes...
[1] [nodemon] starting `node server.js startServer`
[1] Up and running on port : 7000
[1] --------make-runnable-output--------
[1] undefined
[1] ------------------------------------
[0] 4:08:52 PM - Compilation complete. Watching for file changes.
这是什么原因?
答案 0 :(得分:0)
make-runnable
包使您能够通过导入“ custom”模块并为printOutputFrame
指定布尔值来清除输出帧。而不是require('make-runnable')
,请使用:
require('make-runnable/custom')({
printOutputFrame: false
})
但是,这不会删除“未定义”(或输出)消息,因为make-runnable
期望在解决承诺时记录一些返回值。
相反,请从函数中返回一些值以供Bluebird(或可运行的)自行打印:
static startServer() {
let app = express();
app.use(cookieParser());
app.use(express.static(__dirname + "/public"));
let server = http.createServer(app);
- server.listen(7000, () => {
- console.log('Up and running on port : ' + 7000);
- });
+ server.listen(7000)
+ return 'Up and running on port : ' + 7000;
}
注意:我尚未证实这不会导致服务器停止监听,但这只是说明程序包将对您的功能产生什么期望。
*有点老的问题了,但是最近我遇到了同样的问题,所以我想提供一个解决方案。
之所以打印“ undefined”,是因为它期望您所调用的函数有一些返回值。考虑以下功能片段(我正在研究并遇到此问题):
generate: function() {
// ... some preliminary code
fs.writeFile(file, modifiedFileData, error => {
if (error) throw error
console.log('App key generated successfully.')
})
}
输出:
$ node utils/EncryptionKey.js generate
--------make-runnable-output--------
undefined
------------------------------------
App key generated successfully.
Done in 0.27s.
默认情况下,我只希望将该消息记录到控制台。如果没有make-runnable
,它就可以正常工作,因为我最初只是运行该函数,但想将其导出。查看make-runnable
的源代码(engine.js),以下函数:
function printOutput(returnValue) {
Bluebird.resolve(returnValue)
.then(function (output) {
if (options.printOutputFrame) {
console.log('--------make-runnable-output--------');
}
console.log(output);
if (options.printOutputFrame) {
console.log('------------------------------------');
}
}).catch(printError);
}
期望一些返回值,因为Bluebird将您正在执行的函数包装为一个承诺。我改为将初始代码更改为:
generate: function () {
// ... some preliminary code
fs.writeFile(file, modifiedFileData, error => {
if (error) throw error
return true
})
return 'App key generated successfully.'
}
并删除了“ undefined”值,并打印了我的应用密钥消息。
输出:
$ node utils/EncryptionKey.js generate
App key generated successfully.
Done in 0.26s.